【问题标题】:Can a parent read from a pipe if a child dies?如果孩子死了,父母可以从管道中读取吗?
【发布时间】:2019-09-02 21:11:25
【问题描述】:

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

【问题讨论】:

    标签: c pipe


    【解决方案1】:

    当孩子死亡时,它的管道末端会自动关闭。父母会在阅读完孩子死前写的所有内容后阅读 EOF,就像客户端显式调用 close() 一样。

    请注意,父级只能读取实际已写入管道的数据。如果子进程正在执行缓冲输出(使用stdio 时的默认设置),则应用程序写入的所有数据在它终止时可能不在管道中。当进程调用exit() 时,Stdio 缓冲区会自动刷新,但如果它因信号而死,则不会调用它。

    【讨论】:

    • 缓冲数据可能在某个层写入管道(例如,C 的 stdio 服务)而不是管道本身,当子进程死亡时,这些数据会丢失。
    • @EricPostpischil 但是,从技术上讲,该过程尚未将其写入管道
    • @EricPostpischil Ctx 是正确的,但我已经对此进行了澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2015-06-13
    • 2019-05-09
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多