内核篇第四讲:wait () 函数

大家好,接下来的一段时间我将开始学习野火的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**指向的变量。

如果不需要关心子进程退出状态,可以传 NULLwait(NULL);

2. 状态解析宏

(1)WIFEXITED(status) 判断子进程是否正常退出(return / exit())。

  • 返回非 0:正常退出
  • 返回 0:被信号杀死

(2)WEXITSTATUS(status) 只有 WIFEXITED 为真时才能使用,取出子进程的退出码(exit 里传入的数字)。

(3)WIFSIGNALED(status):子进程是否被信号终止

(4)WTERMSIG(status):取出杀死子进程的信号编号

3. 简单示例代码

4. 关键点总结

  1. wait() 阻塞等待任意子进程结束;
  2. 作用:防止僵尸进程,子进程退出后内核保留 PCB,父进程 wait 才会彻底释放;
  3. status 不能直接打印,必须用上面的宏解析,status 内部是位编码;
  4. 局限性:只能等任意一个子进程 ,不能指定等待某个 pid;想要指定 pid 等待,用 waitpid()
相关推荐
zhangrelay1 小时前
《机器人控制器设计与编程》课程习题资料-2026
linux·笔记·学习·ubuntu
邪修king1 小时前
Re:Linux 系统篇(三十四):进程间通信开篇Chapter1 —— 匿名管道 pipe 深度拆解与代码实战
android·linux·运维·开发语言
花间相见1 小时前
【计算基础|网络04】—— HTTP接口实战(下):接口测试、鉴权与跨域排错
java·linux·人工智能·后端·python·计算机网络·postman
kkkkkkkkkk_Z1 小时前
新手自学嵌入式|学习日记:从C语言到51单片机基础(GPIO、中断、定时器与PWM篇)
linux·笔记·学习·51单片机
凤年徐1 小时前
C++ 仿 muduo 高并发服务器:日志模块
linux·服务器
Linux-lucky2 小时前
39-41-Linux学习之旅之redis缓存基础与NFS基础
linux·运维·mysql·ubuntu
whyutianict_vv2 小时前
云计算运维培训课程技术栈拆解:从 Linux 网络到 AI 推理的五层能力分层
linux·云计算
xiaoye-duck3 小时前
《Linux 网络编程》深入理解数据链路层:从MAC帧到ARP协议的底层原理详解
linux·网络
j7~3 小时前
【Linux 网络】四十.《网络基础(传输层协议:UDP、TCP)》--中篇
linux·tcp·tcp协议·确认应答机制·连接管理机制·tcp流量控制