首页 > 试题广场 >

请问下面的程序最后会产生多少个进程?

[单选题]
请问下面的程序最后会产生多少个进程:
int main( ){ 
     int i; 
     for(i = 0; i < 5;i++){ 
        int pid = fork(); 
        if(pid == 0){ 
            //do something 
        } else { 
        //do something 
        } 
    }
    // do somthing,sleep
    return 0;
}
  • 5
  • 10
  • 15
  • 32
i=0时,共有两个进程: 主进程和主进程创建的第一个进程
i=1时,以上两个进程分别创建新的进程,此时共有四个进程
i=2时,以上四个进程分别创建新的进程,此时共有8个进程
....
依次类推, 当i=n时,共创建2^(n+1)个进程
发表于 2015-08-15 17:13:20 回复(0)
http://blog.csdn.net/jason314/article/details/5640969
菜鸟级可以看,讲的很好
发表于 2015-08-21 16:16:37 回复(41)
25=32。
每一个fork()出来的新进程,和父进程使用相同的代码段,复制父进程的数据段和堆栈段,不过有“逻辑”复制和“物理”复制之分,在本题没有影响。也就是说每一个fork()出的新进程和父进程有相同大小的i,并且执行位置也是一样的
编辑于 2015-08-17 21:52:18 回复(0)
i=0后 产生2个进程
i=1后        4
i=2            8
   3            16
   4            32
发表于 2015-08-13 21:43:07 回复(2)
其实是一个满二叉树的结构,对应于最后一层的叶子节点个数
发表于 2015-09-24 13:02:23 回复(0)
intmain( ){ 
     inti; 
     for(i = 0; i<5;i++){ 
        intpid = fork(); 
        if(pid == 0){ 
            //do something 
            exit(); //  ----------------这里加上exit()的话,子线程退出,不参与fork子进程的工作,   } else{                                  //这样循环创建了5个子线程,加上主线程就是6个
        //do something 
        } 
        }
    // do somthing,sleep
    return0;
}
发表于 2017-06-26 17:18:40 回复(1)
父进程f0
i=0,在第4行创建子进程z1,返回子进程的pid;然后f0和z1执行4行以下的语句(包括循环部分),初始的i=0
i=1,此时有f0和z1两个进程在执行,各自创建一个进程,z2,z3,现在有4个进程了
i=2,。。。。现在是8个进程
i=3,  。。。。16个
i=4,.......32个
需要注意三点:
(1)子进程是从创建的位置开始执行语句,比如z1被创建后就执行第5行以后的部分(如果有循环则进入循环语句);
(2)子进程继承了原来父进程的变量值,因此z1被创建的时候循环从i=0执行,而z2,z3被创建的时候循环从i=1开始执行;
(3)父进程f0创建子进程后,返回pid值为子进程编号,而在子进程z1中,第5行的pid值为0;
发表于 2016-09-17 22:29:12 回复(0)
最后会产生,而不是一共
发表于 2017-04-30 08:53:56 回复(1)
进程的概念在什么书上有介绍啊,怎么找不到呢
发表于 2016-07-12 10:17:23 回复(3)
一个细胞有丝分裂5次,最后一共几个细胞?
编辑于 2023-10-18 23:01:35 回复(0)
fork还是头一次见,c++居然有内置函数
发表于 2023-05-26 14:01:09 回复(0)
为什么是2的级数
发表于 2022-06-08 20:21:01 回复(0)
<p>是一个树形结构</p>
发表于 2021-07-08 10:38:04 回复(0)
题目有问题, // do something的事情可多了, 如果在do something中,完成实际任务后exit, 那只会创建5个进程。
而且实际项目使用时,也会在do  something代码处添加exit ,

发表于 2018-04-28 11:10:11 回复(0)
每次一个进程产生两个进程!是一个满二叉树的结构,对应于最后一层的叶子节点个数,2^(n+1)
发表于 2017-08-31 09:09:53 回复(0)
2的五次方
发表于 2017-03-27 17:22:19 回复(1)
先不考虑主线程,
i=4时,由fork()创建出一个线程;
i=3时,由fork()创建出一个线程,主线程和新线程中i变为4,所以共创建了1+2*1=3个
i=2时, 由fork()创建出一个线程,主线程和新线程中i变为3, 以共创建了 1+2*3=7个
i=1时, 由fork()创建出一个线程,主线程和新线程中i变为2, 以共创建了 1+2*7=15个
i=0时, 由fork()创建出一个线程,主线程和新线程中i变为1, 以共创建了 1+2*15=31个
加上主线程,共32个
编辑于 2015-09-05 15:58:23 回复(0)
2的i次方
发表于 2015-08-31 21:52:43 回复(0)