2012-04-02 38 views
0
... 
int main(void) 
{ 
    int i; 
    for(i=0;i<2;i++){ 
     switch(fork()){ 
     case 0: 
      sleep(1); 
      break; 
     default: 
      sleep(1); 
     } 
    } 
    while(i--) wait(NULL); 
    return 0; 
} 

嗨。我試圖理解流程和分支。此程序創建了多少個進程?

我不確定此代碼段創建了多少個進程。

1爲主程序,然後主程序自我複製(創建子進程),然後孩子自己複製(2個孩子和主進程)。

所以那些是3個過程。

我是對的還是我錯過了什麼?

+3

這功課嗎? – littleadv 2012-04-02 18:00:56

+0

這是一個考試問題。 – Tool 2012-04-02 18:02:26

+0

'break'突破**開關**,而不是循環。這是你不瞭解的嗎? – 2012-04-02 18:12:12

回答

2

在主線程(t1)中有一個for循環,它將調用fork()兩次( - > t1.1,t1.2)。第一個分叉線程(t1.1)有一個迭代,所以它會創建另一個( - > t1.1.1)。 t1.2和t1.1.1都沒有剩下任何迭代,所以沒有更多的線程分叉。

這給我留下了4個線程altoghether

1

請注意,兩種情況在交換機中的行爲是相同的:sleep(1)然後繼續w /循環。由於你的解決方案有兩個行爲不同(一個創建一個孩子,另一個沒有),我會說你錯過了一些東西。

相關問題