可以在程序的返回/结束被称为杀函数之前?

问题描述 投票:1回答:1

我有点困惑的杀(PID,信号)的功能是如何工作的 - 我相信这是异步的,所以信号可能不是几个指令已被执行之后,直至到达。我的问题是,如果你叫杀(PID,信号),然后在下一行返回(如下图所示),你保证了信号将被捕获并处理程序终止之前,或者是有可能不处理退出如果我们运行“返回0”的信号的kill函数完成之前?

kill(pid, SIGUSR1);
return 0;
c++ c signals kill
1个回答
2
投票

如果一个进程发送信号仅其自身,并且该信号没有被阻塞,并且存在用于该过程中没有其他待决的信号,则该信号将被发送的同步(即,kill()返回之前)。

这是不够的保证是100%可靠的,所以你可能不希望依赖于它。另一种方法可能发生在正好在同一时间发送不同的信号,例如;这可能是你的控制之外。

如果一个进程将信号发送到一个不同的过程,那么就不能保证它会kill()返回前收到。但它会即使信号功能的终止发送。

如果多于一个进程将接收信号,kill可以在第一信号被发送,这是不能保证的信令过程之后返回。同样,这可能会导致过程中接收到的信号之前返回。有些平台可能会提供额外的保障。

这里的Posix specification

如果pid的值会导致sig为发送过程中产生,并且如果没有被阻塞sig被调用线程,并且如果没有其他线程具有sig畅通或者在用于sigwait()一个sig功能处于等待状态,或者sig或至少一个未决畅通的信号应kill()返回之前被递送到发送线程。

© www.soinside.com 2019 - 2024. All rights reserved.