您的位置:首页 > 其它

一个循环里fork出的子进程个数

2014-03-17 16:01 127 查看
[lizhe@localhost fork]$ ./exe

pid:4071

------

问以下代码的执行结果

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(){
int pid=0;
for(int i=0;i<3;i++){
pid=fork();
printf("pid:%d\n",pid);
printf("------\n");
}
}

结果如下,有点吃惊

pid:0

pid:4072

------

------

pid:4074

------

pid:4073

------

pid:0

------

pid:0

------

pid:4077

------

pid:0

------

pid:0

------

pid:4078

------

pid:0

------

pid:4079

------

pid:0

------

原来,每次fork一个子进程后,它都分享父进程的内存区域,所以每个fork出的子进程会接着执行循环。

执行第一次的时候,fork出一个进程,第二次执行的时候,连同上次的子进程也会产生子进程,故而1变2,2变4,4变8......

循环执行n次后总共有2的n次方个进程,新进程数则为2的n次方减1.

由于每个进程都要执行一次printf语句,故printf总共执行的次数为2+4+8+16……本例的循环执行3次,printf了14次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: