C中的多叉示例

时间:2011-10-01 21:37:15

标签: c concurrency fork

我正在尝试使用多个叉子的程序 我用这个例子让自己开始 Multiple fork() Concurrency

它完美无缺。但是,当我尝试在这样的孩子中添加一个print语句时:

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

这个过程永远不会结束。我怎样才能在孩子身上做些事情并让父母完成程序的执行呢?

1 个答案:

答案 0 :(得分: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