什么是僵尸进程,有何危害?怎么避免僵尸进程?

什么是僵尸进程?

当子进程(child process)先于父进程(parent process)退出,但是父进程没有调用wait/waitpid回收子进程的资源,则子进程变成僵尸进程。

但是如果该进程的父进程已经结束,那该进程就不会变成僵尸进程,因为每个进程结束的时候,系统会扫描所有运行中的进程,看看有没有哪个进程是刚

刚结束的进程的子进程,如果有就由Init来接管他,成为他的父进程。

 

危害?

如果父进程不调用wait/waitpid,则子进程的保留信息不会被释放,造成内核资源的无法回收,同时进程号会一直被占用,系统所能使用的进程号是

有限的,大量地产生僵尸进程将会导致系统不能产生新的进程。

 

怎么避免僵尸进程?

防止的办法是当父进程fork一个子进程后,必须通过wait/waitpid等函数等待子进程结束,但这会导致父进程挂起,所以通常的做法是用signal函数为

SIGCHLD安装handler,在handler函数中调用wait/waitpid函数进行回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值