我对kill(pid,signal)函数的工作方式有些困惑-我认为它是异步的,因此信号可能要等到执行了几条指令后才能到达。我的问题是,如果您调用kill(pid,signal)然后在下一行返回(如下所示),是否可以保证在程序终止之前捕获并处理了信号,或者是否可以不进行处理就退出如果在终止功能完成之前运行“返回0”的信号?
kill(pid, SIGUSR1);
return 0;
答案 0 :(得分:2)
如果某个进程仅向自身发送信号,并且该信号未被阻塞,并且该进程没有其他挂起的信号,则该信号将被同步发送(即在kill()
返回之前)
这不足以保证100%可靠,因此您可能更希望不要依赖它。例如,另一个过程可能恰好在同一时间发送不同的信号;那可能超出了您的控制范围。
如果某个进程将信号发送到另一个进程,则不能保证在kill()
返回之前会收到该信号。但是即使信令功能终止,它也会被发送。
如果有多个进程将接收信号,则kill
可能会在发送第一个信号后返回,这不能保证是信令过程。同样,这可能导致过程在接收到信号之前返回。某些平台可能会提供其他保证。
如果
pid
的值导致为发送过程生成sig
,并且调用线程没有sig
被阻塞,并且没有其他线程具有{{1} } {}或在sig
函数中等待sigwait()
的情况下,sig
或至少一个未决的未阻塞信号应在sig
返回之前传递到发送线程。>