我使用 pipe()、fork()、dup()、execve() 生成了一个子进程。
从父母那里,等待孩子的标准输入和标准输出关闭(即 read() 两者都返回 0),然后执行 waitpid() 来收集终止状态是否安全?
或者在没有关闭标准输入和标准输出的情况下,进程是否会失败?(因此我的程序永远不会进入waitpid)
为了澄清,我问以下是否安全:
while (child_stdin != -1 && child_stdout != -1) {
poll(...)
if (got_stdout) {
n = read(child_stdout);
if (n >= 0) {
// do something with output
} else if (n == 0) {
child_stdout = -1
}
}
// same for stdin
}
waitpid(child_pid)
或者孩子会终止,但我永远不会在 read() 或 write() 上得到 0。
不涉及任何信号,只是 poll()-ing。