#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 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()函数的执行过程,我已经了解了。
如果有错误的地方,还希望指出。