对fork()函数的一点理解

#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     

扫描二维码关注公众号,回复: 3162317 查看本文章

分析:

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

如果有错误的地方,还希望指出。

猜你喜欢

转载自blog.csdn.net/qq_37474728/article/details/78634930
今日推荐