发布网友
共1个回答
热心网友
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
int main()
{
int i;
pid_t pid;
for (i = 0; i < 10; ++i)
{
pid = fork();
switch(pid)
{
case -1:
perror("fork");
exit(-1);
case 0: //child
printf("I am child");
exit(0);
default:
break;
}
}
while (1)
{
sleep(1);
printf("I am parent\n");
}
return 0; //will never reach here
}
这段程序就可以产生10个僵尸进程,编译执行后ps -ef查看,<defunct>就表示僵尸进程。原理是产生子进程之后它只打印一句话就退出,而父进程最终进入while无限循环,所以不退出,并且它没有调用wait()或者waitpid()函数清理子进程,所以子进程全部成为僵尸进程;如果父进程退出,那么不会产生僵尸进程,因为子进程被过继给1号进程(init进程),init进程负责清理子进程。