一、孤儿进程
父进程先于子进程结束,则子进程称为孤儿进程,子进程的父进程成为 init 进程,称 init 进程领养进程孤儿进程,init 进程称为孤儿院。
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
pid_t pid;
pid = fork();
if( pid == -1 )
{
perror("fork");
exit(1);
}
else if( pid > 0)
{
printf("I am parent,my pid = %d\n",getpid());
sleep(9);
printf("--------------parent going to die------------------\n");
}
else
{
while(1)
{
printf("I am child,my parent pid = %d\n",getppid());
sleep(1);
}
}
return 0;
}
此时程序中的打印信息会一直进行打印,即使你按下 ctrl+c 也不会退出正在执行的程序 ./orpan;此时需要使用 ps -ef ,查看正在打印的程序信息;然后使用 kill -9 + 进程ID(./orphan 的ID)
二、 僵尸进程
进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸进程。
注意:
僵尸进程是不能使用 kill 命令清除掉的。因为 kill 命令只是用来终止进程的,而僵尸进程已经终止。
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
int main(void)
{
pid_t pid;
pid = fork();
if( pid == -1 )
{
perror("fork");
exit(1);
}
else if( pid > 0)
{
printf("I am parent,my pid = %d\n",getpid());
sleep(9);
printf("--------------parent going to die------------------\n");
}
else
{
while(1)
{
printf("I am child,my parent pid = %d\n",getppid()