You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核中SIGCHLD信号为何不中断wait()系统调用?

关于wait()未被SIGCHLD中断反而成功返回的原因
  • 核心逻辑是wait()与SIGCHLD信号的设计是联动的:当子进程终止时,内核会同时完成两个操作——将子进程的退出状态存入父进程的等待队列,以及向父进程发送SIGCHLD信号。
  • 当父进程阻塞在wait()调用上时,子进程终止这个事件已经直接满足了wait()的等待条件。此时SIGCHLD信号的到来只是触发了信号处理函数的执行,但wait()的等待目标已经达成,所以信号处理函数执行完毕后,wait()会正常返回子进程的退出状态,而非被信号中断返回-1。
  • 对比异常场景:只有当父进程在wait()阻塞时收到非SIGCHLD的其他信号(比如SIGINT),且该信号的处理方式未设置SA_RESTART时,wait()才会被中断,返回-1并将errno设为EINTR。
  • 额外补充:如果父进程未处于wait()阻塞状态,收到SIGCHLD信号后,通常会在信号处理函数中调用wait()来回收子进程;但如果已经在wait()阻塞,子进程终止的事件直接触发wait()完成回收,信号只是额外触发处理函数,不会打断wait()的正常流程。

内容的提问来源于stack exchange,提问作者meowrainy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:40:58