码迷,mamicode.com
首页 > 系统相关 > 详细

僵尸进程

时间:2018-07-30 21:26:15      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:进程创建   调用   导致   接管   僵尸进程   释放   信息   产生   内核   

僵尸进程的产生:

当一个进程创建了一个子进程时,他们的运行是异步的。父进程不知道子进程什么时候结束,如果父进程很繁忙来不及wait 子进程时,那么当子进程结束时,就会变成僵尸进程。在一个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存。但是仍然保留了一些信息(如进程号pid 退出状态 运行时间等)。这些保留的信息直到进程通过调用wait/waitpid时才会释放。这样就导致了一个问题,如果没有调用wait/waitpid的话,那么保留的信息就不会释放。比如进程号就会被一直占用了。但系统所能使用的进程号的有限的,如果产生大量的僵尸进程,将导致系统没有可用的进程号而导致系统不能创建进程。

 思考一个问题:如果一个子进程变成了僵尸进程,但是父进程在这之后来不及调用wait就结束了,那么这个僵尸进程该怎么处理?

在那种情况下,即子进程结束了但父进程还在继续运行(并未调用wait/waitpid)这段期间,假如父进程异常终止了,那么该子进程就会自动被init接管。那么它就不再是僵尸进程了。应为intit会发现并释放它所占有的资源。(当然如果进程表越大,init发现它接管僵尸进程这个过程就会变得越慢,所以在init为发现他们之前,僵尸进程依旧消耗着系统的资源)

 

僵尸进程

标签:进程创建   调用   导致   接管   僵尸进程   释放   信息   产生   内核   

原文地址:https://www.cnblogs.com/yanxutao/p/9392570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!