孤儿进程:父进程死了,子进程被init进程领养
僵尸进程:子进程死了,父进程没有回收子进程的资源(PCB)
如何回收僵尸进程:杀死父亲,由init进程领养,无法回收
orphan.c
#include<stdio.h>
#include<unistd.h>
int main()
{
pid_t pid=fork();
if(pid==0){
while(1){
printf("I am child,pid=%d,ppid=%d\n",getpid(),getppid());
sleep(1);
}
}else if(pid>0){
printf("I am parent,pid=%d,ppid=%d\n",getpid(),getppid());
sleep(5);
printf("I am parent,I will die\n");
}
return 0;
}
zombie.c
#include<stdio.h>
#include<unistd.h>
int main()
{
pid_t pid=fork();
if(pid==0){
printf("I am child,pid=%d,ppid=%d\n",getpid(),getppid());
sleep(5);
printf("I am child,I will die\n");
}
}else if(pid>0){
while(1){
printf("I am parent,pid=%d,ppid=%d\n",getpid(),getppid());
sleep(1);
}
}
return 0;
}