C语言僵尸进程,僵尸进程的产生和避免

C语言中的僵尸进程是在子进程终止后,父进程未调用wait()时产生的。解决方法包括设置SIGCLD信号忽略,或使用两次fork()使子进程变为孤儿。wait()和waitpid()函数用于收集子进程信息并销毁,waitpid()提供更灵活的控制选项,如等待特定子进程或非阻塞等待。
摘要由CSDN通过智能技术生成

产生原因:

1.在子进程终止后到父进程调用wait()前的时间里,子进程被称为zombie。

2.网络原因有时会引起僵死进程。

解决方法:

1.设置SIGCLD信号为SIG_IGN,系统将不产生僵死进程。

2.用两次fork(),而且使紧跟的子进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。

wait的函数原型是:

#include /* 提供类型pid_t的定义 */

#include

pid_t wait(int *status)

进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,

wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。但如果我们对这个子进程是如何死掉的毫不在意,只想把这个僵尸进程消灭掉,(事实上绝大多数情况下,我们都会这样想),我们就可以设定这个参数为NULL,就象下面这样:

pid = wait(NULL);

如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,同时errno被置为ECHILD。

waitpid的函数原型是:

简介

wa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值