pipe()、fork()、dup()、execve() を使用して子プロセスを生成します。
親から、子の stdin と stdout が閉じるのを待って (つまり、両方で read() が 0 を返す)、waitpid() を実行して終了ステータスを収集しても安全ですか?
または、stdin と stdout を閉じずにプロセスが失敗する可能性はありますか? (したがって、私のプログラムは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() するだけで、シグナルは関係ありません。