2016-11-07 54 views
1

我不确定在这个程序中要创建多少个进程?我想在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); 
} 
+2

在纸上跟踪它。这是我在Uni学习操作系统设计时做过的事情 – StoryTeller

+0

我想我上周已经看到了这段代码...... –

+0

'pid_t childpid = getpid();'缺少。 – jfs

回答

0

的进程的总数是13

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

将只执行以来的叉()系统调用的父返回子到父进程的PID和一个0到子处理。

因此,while循环将生成3个具有childpid变量值0的子进程,并且主父进程现在具有与最后一个分叉子进程相同的childpid变量值。

总流程现在4

直到对于条件

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

每个子进程从产卵前1个小孩在第一叉呼叫。第二个分支将从第一个分叉的两个过程中产生另外两个新的进程。因此,对于每个子进程,我们将产生总共3个新进程的进程。因此,对于while循环中的3个子进程,我们将生成9个新进程。

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