孤儿进程:父进程死了,子进程被init进程领养。
僵尸进程:子进程死了,父进程没有回收子进程资源(PCB)。
孤儿进程例子:orphan.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
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(3);
printf("I will die\n"); //提示父进程将要死亡
}
return 0;
}
用命令:gcc -o orphan orphan.c 编译
运行图片:
可以看出,在父进程死亡后,子进程ppid发生了变化。
僵尸进程例子:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
pid_t pid = fork();
if(pid == 0)
{
printf("I am child,pid = %d,ppid = %d\n",getpid(),getppid());
sleep(3);
printf("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;
}
用命令:gcc -o zomble zomble.c 编译
运行图片:
打开另一个终端窗口,查看这个程序
其中第二行中:Z+代表这是一个僵尸进程。