Linux下回收子进程wait函数和waitpid函数的基本使用

本文介绍了Linux环境下,孤儿进程和僵尸进程的概念,并详细解析了wait和waitpid函数在回收子进程中的作用。wait函数会导致父进程阻塞,直到子进程结束,而waitpid则允许指定特定子进程进行非阻塞回收。通过这两个函数,可以有效地管理和避免僵尸进程的产生。

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

1. 孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程变为init进程 。

2. 僵尸进程:子进程终止了,父进程尚未回收子进程,子进程残留资源(PCB)存放于内核中,子进程变成僵尸(Zombie)进程。 

问:那为什么子进程要把PCB残留在内核里呢? 

答:因为子进程终止后,它会把终止信号等退出状态(不管正常终止还是异常终止都对应一个信号)保存在内核的PCB里面,只有这个子进程的父亲节调用wait或者waitpid获取这些退出状态,然后才会彻底清除掉这个子进程。如果父进程不调用wait或者waitpid,那么这个子进程就会成为僵尸进程。

问:什么方法可以清除掉一个僵尸进程。(附:kill命令清除不了僵尸进程的,因为kill命令只是用来终止进程的,而僵尸进程已经是终止的了) 

答:kill确实是直接清除不掉僵尸进程,但是我们可以kill掉僵尸进程的父进程,这样僵尸进程的父进程就变为init进程,init进程自然会调用wait或者waitpid清除这个僵尸进程。 

3. wait函数

pid_t wait(int *status); //status传出参数,存放子进程的退出状态信息

附:父进程一旦调用该函数,就会阻塞等待,直到子进程退出

返回值:成功返回子进程id,失败返回-1(无子进程) 。

status传出参数保存着子进程的退出状态,下面对其说明如下:

if (WIFEXITED(status)) { //IFEXITED非0,进程正常退出

                        printf("exited, status=%d\n", WEXITSTATUS(status)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值