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
发布评论