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循環
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循環
我相信答案是6
在第一次迭代,fork()
被調用時,分裂過程中2,從而調用PS的兩倍。
在第二次迭代中,在每個進程中再次調用fork,所以現在有4個進程運行ps。
總共調用ps:2 + 4 = 6。
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),否則沒有,因爲它不會編譯。 :-)
6次。
它創建了一個流程樹是這樣的:
A-+
|-B-+
| |-C-+
|-D
甲做它的兩倍(I = 0)
B則兩次(I = 0)
Ç做一次( I = 1)
d做一次(I = 1)
注意,我的信件用法是區分它們。沒有可預測的輸出順序,因爲過程切換對於程序員來說是不確定的。
斑點。我希望OP能在他的任務中取得好成績;-) – jond3k
運行它並找出? –
是的,我只是想要有人解釋我即時獲得6 -_- – Leanne
它沒有那麼糟糕的一個問題, OP可能一開始就困惑於奇怪的答案, 叉是不容易掌握。 – nikhil