我有点困惑的杀(PID,信号)的功能是如何工作的 - 我相信这是异步的,所以信号可能不是几个指令已被执行之后,直至到达。我的问题是,如果你叫杀(PID,信号),然后在下一行返回(如下图所示),你保证了信号将被捕获并处理程序终止之前,或者是有可能不处理退出如果我们运行“返回0”的信号的kill函数完成之前?
kill(pid, SIGUSR1);
return 0;
如果一个进程发送信号仅其自身,并且该信号没有被阻塞,并且存在用于该过程中没有其他待决的信号,则该信号将被发送的同步(即,kill()
返回之前)。
这是不够的保证是100%可靠的,所以你可能不希望依赖于它。另一种方法可能发生在正好在同一时间发送不同的信号,例如;这可能是你的控制之外。
如果一个进程将信号发送到一个不同的过程,那么就不能保证它会kill()
返回前收到。但它会即使信号功能的终止发送。
如果多于一个进程将接收信号,kill
可以在第一信号被发送,这是不能保证的信令过程之后返回。同样,这可能会导致过程中接收到的信号之前返回。有些平台可能会提供额外的保障。
如果
pid
的值会导致sig
为发送过程中产生,并且如果没有被阻塞sig
被调用线程,并且如果没有其他线程具有sig
畅通或者在用于sigwait()
一个sig
功能处于等待状态,或者sig
或至少一个未决畅通的信号应kill()
返回之前被递送到发送线程。