
大家好,接下来的一段时间我将开始学习野火的Linux 系统课程并将学习到的干货逐步更新到我的CSDN博客中。没时间刷课的同学可以把我的博客喂给AI 突击一下。
目录
[1. 基础信息](#1. 基础信息)
[2. 状态解析宏](#2. 状态解析宏)
[3. 简单示例代码](#3. 简单示例代码)
[4. 关键点总结](#4. 关键点总结)
1. 基础信息
1、头文件:#include <sys/wait.h>
2、函数原型:pid_t wait(int *status);
3、返回值
成功:返回已经结束的子进程 pid
失败:返回 -1(比如没有子进程)
调用 wait 的父进程会阻塞 ,直到任意一个子进程退出; 子进程退出后,内核回收子进程资源,把**退出状态存入 status**指向的变量。
如果不需要关心子进程退出状态,可以传
NULL:wait(NULL);
2. 状态解析宏
(1)WIFEXITED(status) 判断子进程是否正常退出(return / exit())。
- 返回非 0:正常退出
- 返回 0:被信号杀死
(2)WEXITSTATUS(status) 只有 WIFEXITED 为真时才能使用,取出子进程的退出码(exit 里传入的数字)。
(3)WIFSIGNALED(status):子进程是否被信号终止
(4)WTERMSIG(status):取出杀死子进程的信号编号
3. 简单示例代码


4. 关键点总结
wait()阻塞等待任意子进程结束;- 作用:防止僵尸进程,子进程退出后内核保留 PCB,父进程 wait 才会彻底释放;
- status 不能直接打印,必须用上面的宏解析,status 内部是位编码;
- 局限性:只能等任意一个子进程 ,不能指定等待某个 pid;想要指定 pid 等待,用
waitpid()。