我創建了三個進程,我想同步他們的工作。具體來說,我希望第一個進程等待第二個,第二個等待第三個。基本上按照它們創建的相反順序執行它們。子進程彼此等待
這是我到目前爲止所做的。
for (; i < 3 ; i++){
pids[i] = fork();
if (pids[i] == 0)
break;
}
if (pids[i] != 0){
wait(); // Main thread has to wait..
}
else{
if (i == 0){
waitpid(pids[1], &status, 0);
printProcessInfo(0);
}
else if (i == 1){
waitpid(pids[2], &status, 0);
printProcessInfo(1);
}
else if (i == 2){
printProcessInfo(2);
}
}
我使用我檢查我在哪個孩子的過程,因爲我假設我得到正確的我在孩子的過程,所以若i = 0,我是事實上的拳頭孩子。這個假設是真的嗎?無論如何,我沒有得到我想要的訂單,實際上這些流程是按照自然順序執行的,繞過了我放置的waitpid調用。有任何想法嗎?
你必須這樣做嗎?如果每個孩子都創造一個孩子,這會容易得多。正如你目前所看到的,沒有一個孩子會知道年輕的兄弟姐妹,只是年齡較大的兄弟姐妹。 IOW,當父級創建child1時,child1是它自己的進程。該進程的pid表不會被更新以反映更多的孩子。只有父母的pid表具有所有信息。您的waitpid()調用可能在ECHILD上失敗(您沒有檢查),這就是爲什麼它看起來沒有被執行。 – Duck
我想通了。這是一個非常混亂的學校任務,因爲教授特別要求我們不要讓第一個叉子等第二個,所以我很困惑。我想我會研究一些其他形式的IPC,即使我們還沒有在這個章節中討論過,也是如此。謝謝。 –