2011-08-21 144 views
1
int main(int argc, char** argv) { 
    int i = 0; 
    while (i < 2) { 
     fork(); 
     system("ps -o pid,ppid,comm,stat"); 
     i++; 
    } 
    return (EXIT_SUCCESS); 
} 
與解釋執行多少次ps命令

誰能告訴我?fork()的執行for循環

+7

運行它並找出? –

+0

是的,我只是想要有人解釋我即時獲得6 -_- – Leanne

+1

它沒有那麼糟糕的一個問題, OP可能一開始就困惑於奇怪的答案, 叉是不容易掌握。 – nikhil

回答

6

我相信答案是6

在第一次迭代

fork()被調用時,分裂過程中2,從而調用PS的兩倍。

在第二次迭代中,在每個進程中再次調用fork,所以現在有4個進程運行ps。

總共調用ps:2 + 4 = 6。

1
Initial Process 
i == 0 
-> Fork 1 
    system call 
    i == 1 
    -> Fork 1.1 
     system call 
    system call 
system call 
i == 1 
-> Fork 2 
    system call 
system call 

餘數6,每次2從最初的進程和第一叉(4),以及一個從每個過程分叉當我== 1從這些2個進程。

當然,這是假設你修復了缺失的末端大括號(並定義了EXIT_SUCCESS),否則沒有,因爲它不會編譯。 :-)

4

6次。

它創建了一個流程樹是這樣的:

A-+ 
    |-B-+ 
    | |-C-+ 
    |-D 

甲做它的兩倍(I = 0)

B則兩次(I = 0)

Ç做一次( I = 1)

d做一次(I = 1)

注意,我的信件用法是區分它們。沒有可預測的輸出順序,因爲過程切換對於程序員來說是不確定的。

+0

斑點。我希望OP能在他的任務中取得好成績;-) – jond3k