我正在尝试使用多个叉子的程序 我用这个例子让自己开始 Multiple fork() Concurrency
它完美无缺。但是,当我尝试在这样的孩子中添加一个print语句时:
if ((p = fork()) == 0) {
// Child process: do your work here
printf("child %i\n", ii);
exit(0);
}
这个过程永远不会结束。我怎样才能在孩子身上做些事情并让父母完成程序的执行呢?
答案 0 :(得分:3)
在您的示例代码中
if (waitpid(childPids[ii], NULL, WNOHANG) == 0) {
应该是
if (waitpid(childPids[ii], NULL, WNOHANG) == childPids[ii]) {
因为
waitpid():成功时,返回状态已更改的子进程ID;出错时,返回-1;如果指定了WNOHANG并且pid指定的子(ren)尚未更改状态,则返回0。