例如,如果我使用 kill(C 库 signal.h 中的函数)向 child 发出 SIGINT 信号,是否会在 kill 函数返回之前捕获来自 child 的 SIGCHLD 信号?
最佳答案
虽然 kill
系统调用不可中断(至少根据 the man page ),仍然至少有两种情况 SIGCHLD
处理程序可以在函数返回:
- 如果您的进程中有另一个线程,内核甚至可以在
kill
系统调用返回您的第一个线程之前选择在那里运行信号处理程序。 - 您可能正在使用 libc 中的
kill
包装函数。信号处理程序可以在系统调用返回到它和它返回到您的代码之间运行。
所以如果你想确保在 kill
返回之前你没有得到 SIGCHLD
,那么你需要使用 sigprocmask
在 kill
之前阻止它,直到您准备好为止。
关于c - kill会被一个信号打断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61570026/