此代码将生成多少个进程?

时间:2016-11-07 12:50:52

标签: c process

我不确定在这个程序中会创建多少个进程?我想在while循环中会创建三个子进程。然后,每个子进程将分叉两次,这意味着将有两个子进程加上该子进程创建的进程也将进行分叉,并且每个状态将有4个子进程。总共有12个流程。这是真的吗?

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

int main(){
 pid_t childpid;
 int i=0;
 while((childpid>0) && (i<3))
 {
      childpid=fork();
      i++;
 }
 if(childpid==0){
      fork();
      fork();
 }
 exit(0);
}

1 个答案:

答案 0 :(得分:0)

进程总数为13

 while((childpid>0) && (i<3)) 

只会为父进程执行,因为fork()系统调用会将子进程的pid返回给父进程,并将0返回给子进程。

因此,while循环将生成3个子进程,其中childpid变量值为0,而主父进程现在的childpid变量值等于最后一个分叉子进程的值。

到目前为止的总流程4

对于条件

if(childpid==0){
      fork();
      fork();
 }

每个子进程在第一次fork调用之前产生1个子进程。第二个fork将从第一个fork的两个进程中生成另外两个新进程。因此,对于每个子进程,我们将生成总共3个新进程。 因此,对于来自while循环的3个子进程,我们将生成9个新进程。

因此,进程总数将为4 + 9 = 13