所谓孤儿进程就是指,一个子进程的父进程先于子进程结束,此时子进程就成为了一个孤儿进程,它由INIT进程收养,成为INIT的子进程。
举例:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
pid = fork();
switch (pid)
{
case 0:
while (1)
{
printf("A background process, PID: %d, ParentPID: %d/n"
getpid(), getppid());
sleep(2);
}
case -1:
perror("Process creation failed/n");
_exit(-1);
default:
printf("I am a parent process, my pid is %d/n", getpid());
_exit(0);
}
return 0;
}
程序运行的结果如下:
A background process, PID: 19222, ParentPID: 19221
I am parent process, my pid is 19221
A background process, PID: 19222, ParentPID: 1
A background process, PID: 19222, ParentPID: 1
A background process, PID: 19222, ParentPID: 1
...
由上面可以看出调用fork函数后,子进程先进行,打印自己的ID和父进程的ID,之后父进程执行,打印一条消息后退出。此后子进程就成了孤儿进程,并由INIT进程来收养,可以看到此时的父进程ID变成了1.