c - kill会被一个信号打断吗?

标签 c process signals fork sigkill

例如,如果我使用 kill(C 库 signal.h 中的函数)向 child 发出 SIGINT 信号,是否会在 kill 函数返回之前捕获来自 child 的 SIGCHLD 信号?

最佳答案

虽然 kill 系统调用不可中断(至少根据 the man page ),仍然至少有两种情况 SIGCHLD 处理程序可以在函数返回:

  1. 如果您的进程中有另一个线程,内核甚至可以在 kill 系统调用返回您的第一个线程之前选择在那里运行信号处理程序。
  2. 您可能正在使用 libc 中的 kill 包装函数。信号处理程序可以在系统调用返回到它和它返回到您的代码之间运行。

所以如果你想确保在 kill 返回之前你没有得到 SIGCHLD,那么你需要使用 sigprocmaskkill 之前阻止它,直到您准备好为止。

关于c - kill会被一个信号打断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61570026/

相关文章:

C 在函数中比较数组元素

c - C中的段错误将字符串分配给char

.net - 强制标准输出编码为 UTF8

c - DMA 引擎超时和 DMA 内存映射

python - 当输入为BITS的奇数个(不是字节)时,生成CRC 8/16的最佳方法? C或Python

linux - Linux 下自动杀死进程

PHP exec() 不存储进程 ID

按下任意箭头键时更改函数内的变量

C unix 套接字。需要处理的信号

c - 为多个信号提供单个信号处理函数的正确方法是什么?