对fork()函数的一点理解
2017-11-26 02:15
176 查看
#include<stdio.h> #include<unistd.h> int main() { inti; printf("i\ts/f\tpid\tppid\t\n"); for(i= 0; i < 2; i++) { pid_ta = fork(); printf("%d\t",i); if(a== 0) { printf("son\t%4d\t%4d\t\n",getpid(), getppid()); }else if(a > 0) { printf("father\t%4d\t%4d\t\n",getpid(), getppid()); } } return0; }
话不多说,先给出代码。
这里用p+进程id表示进程,如:p3714。
运行结果如下:
i s/f pid ppid
0 father 3804 3714
1 father 3804 3714
0 son 3805 3804
1 son 3806 3804
1 father 3805 975
1 son 3807 3805
分析:
程序执行,p3804被产生。
在第一次循环中:p3804产生p3805。
在第二次循环中:p3804产生p3806,p3805产生p3807。
进程间的关系可以用如下的树表示:
接下来分析三次循环的情况(主要代码不变,只是循环次数变为三次):
运行结果如下:
i s/f pid ppid
0 father 4146 3714
1 father 4146 3714
0 son 4147 4146
2 father 4146 3714
1 father 4147 4146
2 son 4149 4146
1 son 4148 4146
2 father 4147 975
2 father 4148 975
2
7eb1
son 4151 975
1 son 4150 975
2 father 4150 975
2 son 4153 4150
2 son 4152 975
分析:
程序执行,p4146被产生。
在第一次循环中:p4146产生p4147
在第二次循环中:p4146产生p4148,p4147产生p4150
在第三次循环中:p4146产生p4149,p4148产生p4151,p4147产生p4152,p4150产生p4153
进程间的关系可以用如下的树表示:
当循环次数增加时,程序执行过程可以以此类推。
至此,关于fork()函数的执行过程,我已经了解了。
如果有错误的地方,还希望指出。
相关文章推荐
- 《王保明老师----Linux开发学习笔记》------讲03:进程 -----fork( )函数的一点理解
- fork()函数的理解
- 一点对pipe()函数的理解
- FORK()函数的理解
- FORK()函数的理解
- 关于指针数组、数组指针、及函数指针和指向函数指针数组的指针的一点理解
- fork()函数 自己的理解
- FORK()函数的理解
- Unix/Linux fork()函数的理解
- 函数指针使用的一点理解
- 知名讲师fork()函数的理解
- 【Linux】fork函数的理解
- FORK()函数的理解
- fork()函数的理解
- fork()函数的理解
- 关于scanf()函数的一点理解
- 对C#下函数,委托,事件的一点理解
- FORK()函数的理解
- FORK()函数的理解
- FORK()函数的理解