waitpid
2026/4/18 3:23:17 网站建设 项目流程

1 是什么?

waitpid 是 Linux/Unix 系统中用于进程管理的核心函数。 它的主要作用是让父进程暂停执行,直到一个指定的子进程状态发生变化, 然后获取该子进程的状态信息并进行“收尸”(回收资源)。

2 函数原型

#include<sys/types.h>#include<sys/wait.h>pid_twaitpid(pid_tpid,int*status,intoptions);
参数1 pid_t pid 指定等待的子进程: • > 0:待进程ID 等于 pid 的特定子进程 • = 0:等待与调用者同进程组的任意子进程 • = -1:等待任意子进程(等价于 wait()) • < -1:等待进程组 ID 为 abs(pid) 的任意子进程
参数2 int *status 一个输出参数,用于保存子进程的退出状态信息(如退出码、终止信号等)。 若不关心退出状态,可设为 NULL。
参数3 int options 控制函数行为,可通过 | 运算符组合使用: 控制等待行为: • 0:阻塞等待,直到子进程状态变化 • WNOHANG:非阻塞。若无子进程状态变化,立即返回 0 • WUNTRACED:也报告被 SIGSTOP 暂停的子进程 • WCONTINUED:也报告被 SIGCONT 恢复的子进程
返回值 成功:返回状态发生变化的子进程 PID 0:仅在设置了 WNOHANG 选项,且没有子进程退出时返回。 失败:返回 -1,并设置 errno

3 作用

同步父子进程: 使父进程在关键时刻等待子进程完成,确保程序执行顺序。 防止僵尸进程: 子进程结束后,内核会保留其 PCB 直到父进程调用 waitpid 读取状态。 不调用会导致僵尸进程堆积。 精确控制: 与 wait 不同,waitpid 可以等待特定子进程, 或通过 WNOHANG 实现非阻塞轮询, 适用于父进程需同时处理其他任务的场景。

4 与 wait() 的区别

wait 函数 #1 等待对象 任意子进程 #2 仅支持阻塞等待

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询