我们说我有:
command1 |命令2
并且忘了让command2进程关闭管道的写入结束。
如果是这样,command1将继续读取command2,因为它不知道何时停止读取?
如果我忘记让command1进程关闭管道末尾会发生什么?
command2进程是否会继续等待有人阅读,因为它认为某个进程正在尝试从中读取?
答案 0 :(得分:1)
我认为你的输入和输出混淆了。
command1只写入command2正在读取的管道 - 当该管道处于活动状态时(即command2尚未死亡或主动关闭其输入描述符),command1将继续尝试在其中发送其输出(或者直到command1本身完成。)
如果command1完成,并且它已设法将其所有'输出发送到STDOUT(它是管道的输入端),它将退出,并且管道的那一端将被关闭。如果command2仍然从其'STDIN(管道的输出端)读取,它将能够获取最后一个数据,并将看到文件结束条件。
另一方面,如果command2在command1完成发送之前手动关闭其输入或退出,则下一次command1尝试写入STDOUT时,会出现“管道损坏”错误。
希望这可以解决一些问题。