news 2026/6/15 17:29:29

Linux进程等待——wait、waitpid与僵尸进程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux进程等待——wait、waitpid与僵尸进程

目录

1. 引言

2. 进程等待的必要性

3. wait 函数

4. waitpid 函数

5. 获取子进程退出状态

6. 阻塞与非阻塞等待

阻塞等待示例

非阻塞等待示例

7. 补充:孤儿进程与守护进程

8. 总结


1. 引言

如果父进程不等待子进程退出,子进程会变成僵尸进程(Zombie),占用内核资源,甚至导致内存泄漏。本文详细讲解进程等待的必要性、waitwaitpid的使用方法,以及如何获取子进程的退出状态。

2. 进程等待的必要性

  • 回收子进程资源:避免僵尸进程;

  • 获取子进程退出状态:判断任务执行结果;

  • 防止内存泄漏:僵尸进程无法被kill -9杀死。

3.wait函数

c

#include <sys/wait.h> pid_t wait(int *status);
  • 返回值:成功返回子进程PID,失败返回-1;

  • 参数status:输出型参数,用于获取子进程退出信息,不关心则传NULL

4.waitpid函数

c

pid_t waitpid(pid_t pid, int *status, int options);

参数pid

  • pid == -1:等待任意子进程,同wait

  • pid > 0:等待指定PID的子进程。

参数options

  • 0:阻塞等待;

  • WNOHANG:非阻塞等待,若子进程未退出则立即返回0。

返回值:

  • 正常返回子进程PID;

  • WNOHANG且无子进程退出时返回0;

  • 出错返回-1。

5. 获取子进程退出状态

status是一个32位整数,其低16位包含以下信息:

  • 高8位(位8~15):退出码(正常退出时);

  • 低7位(位0~6):终止信号编号;

  • 第7位(bit 7):coredump标志。

常用宏:

  • WIFEXITED(status):是否正常退出;

  • WEXITSTATUS(status):提取退出码;

  • WIFSIGNALED(status):是否被信号终止;

  • WTERMSIG(status):提取终止信号。

6. 阻塞与非阻塞等待

阻塞等待示例

c

waitpid(-1, &status, 0); // 等待任意子进程,阻塞
非阻塞等待示例

c

while ((ret = waitpid(-1, &status, WNOHANG)) == 0) { // 子进程仍在运行,执行其他任务 }

7. 补充:孤儿进程与守护进程

  • 孤儿进程:父进程先于子进程退出,子进程被init(PID=1)收养,可自动回收;

  • 守护进程:一种特殊的孤儿进程,脱离终端,后台运行(如sshdcrond)。

8. 总结

  • 始终使用waitwaitpid回收子进程;

  • 非阻塞等待适用于需要同时处理其他任务的场景;

  • 理解status的位结构是调试信号问题的基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 7:07:54

Qt 中 QThread 与 moveToThread 的深度解析:优缺点、区别与联系

Qt 中 QThread 与 moveToThread 的深度解析&#xff1a;优缺点、区别与联系 一、优缺点1、继承QThread1.1、实现方式1.2、优点1.3、缺点 2、使用moveToThread()2.1、实现方式2.2、优点2.3、缺点 3、关键对比总结4、最佳实践建议5、代码示例&#xff08;moveToThread&#xff09…

作者头像 李华
网站建设 2026/6/14 23:04:51

115.使用C++调用YOLO模型:LibTorch(PyTorch C++ API)入门

深夜两点,模型推理卡在99%的内存占用上 上周三凌晨,产线测试同事突然电话过来:“C++部署的YOLOv5在产线机器上跑着跑着就崩了,Python版本明明好好的。” 我盯着屏幕上的torch::jit::load调用,突然意识到——我们团队那个刚毕业的小伙,直接把Python训练出来的.pt文件扔给…

作者头像 李华
网站建设 2026/6/12 6:25:17

电阻电容电感

电阻并联时总电阻第一个公式&#xff1a;Rtotal​R1​1​R2​1​R3​1​R4​1​⋯1​。这个是多个电阻并联时总电阻的计算公式。目的是当有n个电阻并联&#xff08;比如R₁、R₂、R₃…Rₙ&#xff09;时&#xff0c;计算它们的等效总电阻。原理是基于并联电路中各支路电压相等…

作者头像 李华
网站建设 2026/6/12 6:26:17

手机整机接地设计与验证

手机整机接地设计与验证完整指导 —— 面向 Phone 产品的 RF / 天线 / OTA / EMI / 共存系统工程实践 1. 目标与适用范围 1.1 目标 本文旨在为手机整机接地(Grounding)设计提供系统性工程指导,涵盖从理论认知、实现手段、兼容权衡到问题排查的全流程,是连接电气性能、天…

作者头像 李华
网站建设 2026/6/13 23:24:57

AI真的在写AI了?Anthropic发布递归自我提升报告,附完整数据解读

大家好&#xff0c;我是大飞。 昨天晚上&#xff0c;Anthropic&#xff08;Claude Code背后的公司&#xff09;在X上发了一条动态&#xff1a; 我们的内部数据显示&#xff0c;Claude 正在加速人工智能的发展—这可能是通往递归自我改进的路径&#xff0c;或者说人工智能自主构…

作者头像 李华