孤儿进程
- 父进程如果提前退出,那么子进程就称之为“孤儿进程”
- 孤儿进程被1 号进程收养
模拟实现孤儿进程
//模拟实现孤儿进程
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = fork();
if( pid == -1){
perror("fork");
return 1;
}
if(pid == 0){
int times=20;
while(times--){
printf("子进程:%d\n",times);
sleep(1);
}
printf("子进程死亡\n");
}else if(pid > 0 ){
int times = 10;
while(times--){
printf("父进程:%d\n",times);
sleep(1);
}
printf("父进程死亡\n");
}
return 0;
}
测试结果
整个代码运行过程如上图,分别在1,2,3处进程进程查看,1处为正常状态,2处为父进程死亡,子进程还在继续运行,3处为子进程死亡,整个过程结束
由上图可知2号进程(PID=3755)的PPID为3754,刚好为1号进程(PID=3754)的PID,因此2号进程为1号进程的子进程,此时父子进程同时运行。
这时父进程已完成并且退出,但子进程并没有完成, 考虑到该子进程已经没有父进程,因此将1号进程(PID=1)作为该子进程的父进程,在子进程结束时由1号进程(PID=1)进行回收。整个过程到此就结束了。