Linux下wait函数和waitpid函数的使用和总结

本文深入解析了Linux中进程管理的核心函数wait和waitpid。详细介绍了这两个函数的使用方法,包括如何通过它们回收子进程的资源,获取子进程的退出状态,以及如何处理子进程的异常终止。此外,还解释了函数的参数含义,返回值,以及在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid函数获取这些信息,然后彻底清除掉这个进程

  • 函数功能:父进程调用wait函数可以回收子进程终止信息。该函数有三个功能:
    1. 阻塞等待子进程退出
    2. 回收子进程残留资源
    3. 获取子进程结束状态(退出原因)。

wait一旦被调用,就会一直阻塞在这里,直到有一个子进程退出出现为止

进程等待的方法有wait方法和waitpid方法。
这里了解一下函数的使用,头文件包含以及函数原型,以及返回值等等。
wait函数

#include<sys/types.h>
#include<sys/wait.h>
pid_t wait(int *status);
//该函数的参数为输出型参数,该参数可以获得被等待进程的退出状态信息,并把该信息带出
//返回值:失败返回-1,成功就返回被等待进程的pid.

这里大概解释一下输出型参数,函数的输入和输出是靠函数参数的 。如果这个参数是用来做输入的,就叫输入型参数 ,如果这个参数是用来做输的,就叫输出型参数 。
waitpid函数

#include<sys/types.h>
#include<sys/wait.h>
pid_t waiitpid(pid_t pid,int *status,int options);
//该函数的参数:
//第一个参数pid:
//pid=-1,等待任意一个子进程,此时的作用相当于wait函数。
// pid>0,等待一个进程ID是pid的子进程。
//第二个参数status:
//WIFEXITED(status)(查看子进程是否正常退出),若为正常终止子进程退出的状态,则为真,否则为假
//WEIXTSTATUS(status)(获取进程的退出吗),在该进程正常终止(WIFEXITED(status)不为0)的情况下才有意义,提取子进程退出码。
//第三个参数options:
//WNOHANG:若pid对应的子进程没有结束,则返回0,若该子进程结束,则返回子进程的ID.
//返回值:-1 0 大于0
若waitpid等到了正常终止的子进程,则返回该子进程的ID(即为大于0 的情况);
若设置了WNOHANG的值,而等不到正常退出的子进程,即返回0;
若调用waitpid函数出错,则返回-1;
                         

如果,在调用wait或waitpid的函数时,子进程已经退出了,函数会立即退出,并同时释放资源,获取该子进程的退出信息。若子进程存在且依旧在运行(未退出),则进程有可能阻塞。若不存在该子进程,则函数出错返回。

若有错误,欢迎指正 😃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值