#include<stdio.h>#include<sys/types.h>#include<unistd.h>int main(){pid_t pid,pid1;pid=fork();pid1=fork();sleep(1);if(pid>0){if(pid1>0)printf("This is the parent process,my pid is %d/n",getpid());elseprintf("This is the son2 process,my pid is %d,my father is %d/n",getpid(),getppid());}else{if(pid1>0)printf("This is the son1 process,my pid is %d,my father is %d/n",getpid(),getppid());elseprintf("This is the grandson process ,my pid is %d,my father is %d/n",getpid(),getppid());}exit(0);}
运行结果如下:
This is the parent process,my pid is 2772
This is the son2 process,my pid is 2774,my father is 1
This is the son1 process,my pid is 2773,my father is 1
This is the grandson process ,my pid is 2775,my father is 1
再一次运行结果:
This is the parent process,my pid is 2787
This is the son1 process,my pid is 2788,my father is 2787
This is the grandson process ,my pid is 2790,my father is 1
This is the son2 process,my pid is 2789,my father is 1
由于父进程先于子进程结束,所以将子进程过继给init进程,就是1号进程。