孤儿进程与僵尸进程

Posted Alex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了孤儿进程与僵尸进程相关的知识,希望对你有一定的参考价值。

1. 基本概念:

孤儿进程:父进程退出,但是其子进程仍然在运行,那么这些子进程被称为孤儿进程;孤儿进程会被init进程收养,并作善后处理;

僵尸进程:一个已经终止,但是其父进程尚未对齐进行善后处理的进程被称为僵尸进程;ps命令状态为Z的进程;

善后处理:内核为每个终止子进程保存了一定量的信息,这些信息至少包括进程ID,该进程的终止状态,以及进程使用的CPU时间总量。如果父进程没有使用wait或者waitpid获取终止子进程有关信息,这些信息将一直保存,直到父进程处理后才能释放它仍占有的资源;

 

2. 有何危害:

孤儿进程:孤儿进程会被init进程收养,并作善后处理,所以孤儿进程并没有危害;

僵尸进程:如果父进程一直没有执行wait或者waitpid,那么内核将一直保存该子进程的状态信息,如果系统中存在大量的僵尸进程,可能导致可用进程号越来越少,甚至耗尽,所以应当避免僵尸进程的出现;

 

3. 解决办法:

(1) 父进程使用wait或者waitpid等待子进程结束;

(2) 子进程结束的时候,会向其父进程发送SIGCHLD信号,所以,父进程可以注册SIGHLD信号处理,在处理函数中调用wait或者waitpid;

(3) fork两次,即fork一次产生子进程,子进程再fork生成孙进程,子进程结束,主进程使用wait或者waitpid等待子进程,而孙进程在其父进程退出后,成为孤儿进程,被init收养;

 

另:如果当前系统中有大量僵尸进程,则需要找到其父进程,杀死其父进程,则这些僵尸进程会被init收养并善后;

 

以上是关于孤儿进程与僵尸进程的主要内容,如果未能解决你的问题,请参考以下文章

孤儿进程与僵尸进程名词解释

Python 孤儿进程与僵尸进程

孤儿进程与僵尸进程

进程——wait与waitpid僵尸进程与孤儿进程

Linux——进程基本概念僵尸进程与孤儿进程

僵尸进程和孤儿进程