2024年4月8日发(作者:)

什么是孤儿进程和僵尸进程

一、定义:什么是孤儿进程和僵尸进程

僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是

僵尸进程。

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。

孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

注:

僵尸进程将会导致资源浪费,而孤儿则不会。

子进程持续10秒钟的僵尸状态(EXIT_ZOMBIE)

——————————————————

#include

#include

#include

#include

main()

{

pid_t pid;

pid = fork();

1 / 8

if(pid < 0)

printf(―error occurred!n‖);

else if(pid == 0) {

printf(―Hi father! I’m a ZOMBIEn‖);

exit(0);//(1)

}

else {

sleep(10);

wait(NULL);//(2)

}

}

(1)向父进程发送SIGCHILD信号

(2)父进程处理SIGCHILD信号

执行exit()时根据其父进程的状态决定自己的状态:

如果父进程已经退出(没有wait),则该子进程将会成为孤儿进程过继给init进程

如果其父进程还没有退出,也没有wait(),那么该进程将向父进程发送SIGCHILD信号,进入僵尸

状态等待父进程为其收尸。如果父进程一直没有执行wait(),那么该子进程将会持续处于僵尸状态。

子进程将成为孤儿进程

2 / 8