#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号进程。
本文通过一个C语言示例程序展示了如何使用fork()函数创建子进程,并分析了父进程与两个子进程之间的关系及其运行结果。特别关注了在父进程先于子进程结束的情况下,子进程如何被过继给init进程(即1号进程)的现象。
4977

被折叠的 条评论
为什么被折叠?



