程序可以在调用kill函数之前返回/终止吗?

时间:2019-02-11 05:33:59

标签: c++ c signals kill

我对kill(pid,signal)函数的工作方式有些困惑-我认为它是异步的,因此信号可能要等到执行了几条指令后才能到达。我的问题是,如果您调用kill(pid,signal)然后在下一行返回(如下所示),是否可以保证在程序终止之前捕获并处理了信号,或者是否可以不进行处理就退出如果在终止功能完成之前运行“返回0”的信号?

kill(pid, SIGUSR1);
return 0;

1 个答案:

答案 0 :(得分:2)

如果某个进程仅向自身发送信号,并且该信号未被阻塞,并且该进程没有其他挂起的信号,则该信号将被同步发送(即在kill()返回之前)

这不足以保证100%可靠,因此您可能更希望不要依赖它。例如,另一个过程可能恰好在同一时间发送不同的信号;那可能超出了您的控制范围。

如果某个进程将信号发送到另一个进程,则不能保证在kill()返回之前会收到该信号。但是即使信令功能终止,它也会被发送。

如果有多个进程将接收信号,则kill可能会在发送第一个信号后返回,这不能保证是信令过程。同样,这可能导致过程在接收到信号之前返回。某些平台可能会提供其他保证。

这里是Posix specification

  

如果pid的值导致为发送过程生成sig,并且调用线程没有sig被阻塞,并且没有其他线程具有{{1} } {}或在sig函数中等待sigwait()的情况下,sig或至少一个未决的未阻塞信号应在sig返回之前传递到发送线程。