您的位置:首页 > 其它

对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()函数的执行过程,我已经了解了。

如果有错误的地方,还希望指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: