定义,僵尸进程就是已经死亡的(defunct)进程 ,但是仍然在进程表占了一个位置的进程。由于进程表容量有限,如果这样的进程太多,就会占用完进程表的空间,然后系统性能就会降低,而且可能导致系统瘫痪。
如何产生,僵尸进程的产生,一般来说是因为子进程结束,而父进程由于某种设计上的失误在处于睡眠状态或者死循环状态,这样,子进程的结束信息就会存在进程表里面,无法传递给父进程处理,就成了个僵尸进程。但是如果父进程执行完毕,这个进程就成了孤儿进程(orphan 父进程退出而子进程),则init()进程就会接管它,也可以删除进程表的内容。(不知道理解的对不对?)
例子
#include <stdio.h>
#include<sys/types.h>
main(){
if(!fork()){
printf(“child pid=%d/n”, getpid());
exit(0)
}
sleep(20);
printf(“parent pid=%d /n”, getpid());
exit(0);
}
在sleep之前 ps的话,会看到一个小僵尸,但是在sleep之后,ps,就不会出现了,因为init已经接管了这个孤儿进程,正常退出了。