2011-10-01 53 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