#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()); else printf("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()); else printf("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号进程。