2016-11-07 38 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