一个问题:如果子进程死亡,父进程能否从管道中读取数据?

3
如果父进程和子进程通过管道通信,如果在子进程写入并死亡之后,父进程从管道中读取,会发生什么?
1个回答

3
当子进程结束时,它的管道末端会自动关闭。父进程会在读取子进程死亡前写入的所有内容后读到EOF,就像客户端显式调用close()一样。
请注意,父进程只能读取实际写入管道的数据。如果子进程正在执行缓冲输出,默认情况下使用stdio,当它死亡时,应用程序已经写入的所有数据可能都不在管道中。当进程调用exit()时,stdio缓冲区会自动刷新,但如果由于信号而导致该进程死亡,则不会调用此函数。

缓冲数据可能在某些层中写入管道(例如C的stdio服务),而不是在管道本身中,当子进程死亡时,这些数据将会丢失。 - Eric Postpischil
@EricPostpischil 但从技术上讲,该进程尚未将其写入管道。 - Ctx
@EricPostpischil Ctx 是正确的,但我添加了关于此事的说明。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接