孤儿进程:如果一个子进程的父进程先于子进程结束,子进程就成为一个孤儿进程,它由init进程(进程号为1)收养,成为init进程的子进程。
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main() { pid_t pid; pid=fork(); switch(pid) { case 0: while(1) { printf("A background process,PID:%d ,ParentID:%d\n",getpid(),getppid()); sleep(3); } case -1: perror("Process creation faild\n"); exit(-1); default: printf("I am parent process,my pid is %d\n",getpid()); exit(0); } return 0; }
运行结果:
结果分析:
调用fork函数后:
父进程先执行,打印出自己的ID号3161,然后就执行完毕了;
接着子进程开始执行,打印出自己的ID号3162,和父进程ID号3161;
接着因为父进程已经执行完,提前结束,所以此时子进程为孤儿进程,由init进程(进程号1)带养,所以打印出父进程ID为1.