我想执行几个子进程并从中接收结果 . 他们每个人都运行复杂的算法,可能需要一段时间 . 我们的想法是确保它们都不会超过特定的超时时间 . 每个子进程都设置一个警报,如果花费的时间太长,就会终止进程 . 子进程完成后,会发送结果并正常退出 . 为了接收计算结果,我已经为每个子进程设置了管道 . 父进程连续调用每个子进程上的waitpid,然后从其管道中读取结果 . 如果它们保持在时间限制内,这可以正常工作 . 如果第一个孩子比第二个孩子快,它也有效 . 但是,如果第一个孩子比第二个孩子花费的时间更长,那么第二个孩子在轮到等待时已经退出并且其结果不再在其管道中 .

我假设如果一个孩子将其结果写入管道然后退出管道仍应保持活着状态,它的缓冲区应该仍然是满的,直到它被读取然后由父母关闭,但情况似乎并非如此 . 有趣的是:为什么它一直有用呢?第一个孩子写入管道,退出然后父母读取它 . 似乎有一段时间必须通过才能失败 . 但为什么?

我可以尝试等待所有孩子(waitpid与pid = -1)并基于我从waitpid从右侧管道读取的pid . 但是,只有在此沙箱之外没有其他子项时,此方法才有效 . 如果这个过程分叉了更多的孩子,那么我就不能再知道哪些孩子属于哪里了 .

有任何想法吗?