gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:22 27 4
gpt4 key购买 nike

我对 kill(pid, signal) 函数的工作原理有点困惑 - 我认为它是异步的,因此信号可能要等到执行了更多指令后才会到达。我的问题是,如果您调用 kill(pid, signal) 然后在下一行返回(如下所示),您是否保证信号会在程序终止之前被捕获和处理,或者是否有可能在不处理的情况下退出如果我们在 kill 函数完成之前运行“return 0”的信号?

kill(pid, SIGUSR1);
return 0;

最佳答案

如果一个进程只向自己发送一个信号,并且该信号没有被阻塞,并且该进程没有其他挂起的信号,那么该信号将被同步发送(即,在 kill() 返回)。

这不足以保证 100% 可靠,因此您可能不想依赖它。例如,另一个进程可能恰好在同一时间发送不同的信号;那可能不在您的控制范围内。

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

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

这是 Posix specification :

If the value of pid causes sig to be generated for the sending process, and if sig is not blocked for the calling thread and if no other thread has sig unblocked or is waiting in a sigwait() function for sig, either sig or at least one pending unblocked signal shall be delivered to the sending thread before kill() returns.

关于c++ - 程序可以在调用 kill 函数之前返回/终止吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com