僵尸进程的基本介绍

 

关于僵尸进程

 

其实百度百科里已经解释的很清楚了,我这里总结一下:

 

简单来说,僵尸进程就是进程死掉了,爹娘(父进程)不管了,政府(init进程)也不管了!

这里要说明一下:政府还是很好的,如果爹娘没了(父进程结束),政府会接管孩子;如果爹娘还在,政府是不管孩子死活的。僵尸进程,就是爹娘还在,又不管孩子,政府看见爹娘在,也不管孩子,这样孩子死掉了,就变成僵尸了。

 

1、僵尸进程有什么?


在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然保留了一定的信息:进程号、退出状态、运行时间等。

 

2、保留信息有何用处?


系统默认父进程需要知道子进程的退出状态等信息。

 

 

3、僵尸进程危害?


系统所使用的进程号是一个pid_t的类型(typedef int pid_t;),即有符号的整型。在我的机器上:

getconf -a | grep INT  

INT_MAX                            2147483647

INT_MIN                            -2147483648

UINT_MAX                           4294967295

所以,进程号是有限的,如果有大量的僵尸进程,站着茅坑不拉屎,以后系统启动进程就没有进程号资源了!(当然很难发生,所以不必害怕)

 

4、如何避免?


很简单,只要保证孩子能有人接管就行。这里分两种,一是由父母负责,二是由政府负责。由父母负责:父进程可以挂起,等待子进程的退出,比如wait,waitpid等函数的调用;父进程也可以使用signal,对信号绑定处理函数。由政府负责:父进程明确告诉init进程,我不关心子进程的退出状态,你接管吧,可以通过忽略SIGCHILD信号达到目的;也可以父进程退出,让子进程成为孤儿,init会自动接手,可以通过两次fork达到目的(祖父不管孙子)。

 

5、 查看僵尸进程


ps aux 其中的stat字段:(man ps可以查看具体含义)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值