2011-10-01 63 views
0

我想要一個使用多叉的程序。
我用這個例子來讓自己開始 Multiple fork() ConcurrencyC中的多叉示例

它完美的作品原樣。但是,當我嘗試在這樣的孩子中添加打印語句時:

if ((p = fork()) == 0) { 
      // Child process: do your work here 
     printf("child %i\n", ii); 
      exit(0); 
     } 

該過程從未結束。我該如何在孩子身上做些事情,並讓父母繼續完成程序的執行?

+0

會發生什麼你的流程?你看到任何輸出嗎? –

+0

您需要展示更多的代碼;問題不在於你向我們展示的內容。目前還不清楚'ii'設置爲什麼。您可能要考慮使用'getpid()'來打印進程ID。 (例如,我可以想象如何根據需要在父進程中增加「ii」。) –

+0

不要在子進程中調用'exit'。使用'_exit'。否則,孩子可能會沖洗並清潔父母中仍在使用的資源。例如,這可以更改父級正在使用的文件描述符的當前位置,這可能導致數據損壞。 –

回答

3

在您的示例代碼

if (waitpid(childPids[ii], NULL, WNOHANG) == 0) { 

應該

if (waitpid(childPids[ii], NULL, WNOHANG) == childPids[ii]) { 

因爲

waitpid函數():成功,返回其狀態的子進程ID已經改變;出錯時,返回-1;如果指定了WNOHANG並且沒有由pid指定的子(ren)狀態改變,則返回0。

參考:http://linux.die.net/man/2/waitpid

+0

謝謝,工作,鏈接是有幫助的 – richsoni