首页 > 解决方案 > kill() 是否在 C 中立即工作?还是有机会运行下一行?

问题描述

想一想,我猜信号被发送到操作系统并且程序将继续,即使信号仍然在操作系统端挂起。有人可以确认吗?

kill(this_process, signum);
printf("will line this run in any reality of the multi-verse?");
printf("or should I go to sleep?");
sleep(10);

标签: clinux

解决方案


从 POSIX 规范kill()

如果pid的值导致为发送进程生成sig ,并且如果调用线程没有阻塞sig,并且如果没有其他线程已解除阻塞sig或正在等待sigsigwait()的函数,则sig或至少一个未阻塞的未阻塞信号应在返回前传递给发送线程。kill()

因此,如果您在调用时没有其他待处理kill()的信号,则必须立即发送您发送的信号。但是,如果还有其他信号未决,则可以将该信号排队并立即传递较早的信号。


推荐阅读