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

关于waitpid循环代码回收子进程及僵尸进程的技术咨询

解析这段子进程回收代码

先拆解核心的循环语句:

while (waitpid(-1, NULL, WNOHANG) > 0);
  • waitpid(-1, NULL, WNOHANG)的参数作用:
    • -1:指定等待任意一个子进程
    • NULL:不收集子进程的退出状态信息
    • WNOHANG:开启非阻塞模式——如果当前没有已退出的子进程(僵尸进程),函数直接返回0,不会卡住当前进程
  • 循环逻辑:只要waitpid返回值大于0,就继续循环。返回值>0说明成功回收了一个已退出的子进程(也就是僵尸进程)。每调用一次就清理一个僵尸进程,直到系统里没有该进程的子僵尸进程时,waitpid返回0,循环终止。

后面的alarm(60);和子进程回收无关,它是给当前进程设置一个60秒的闹钟,到时间会触发SIGALRM信号,一般用于程序的定时逻辑。

关于僵尸进程的回收:僵尸进程是子进程已经执行完毕,但内核还保留着它的退出状态等元数据,等待父进程调用wait/waitpid这类函数来读取这些数据并释放内核资源。这段循环就是一次性扫干净当前所有的僵尸进程——每一次waitpid调用都会找到一个待回收的僵尸进程,完成资源释放,直到没有剩余的为止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:45:37