如果我不关闭读取结束或写入管道结束会发生什么?

时间:2016-02-03 08:19:38

标签: linux command pipe

我们说我有:

command1 |命令2

并且忘了让command2进程关闭管道的写入结束。

如果是这样,command1将继续读取command2,因为它不知道何时停止读取?

如果我忘记让command1进程关闭管道末尾会发生什么?

command2进程是否会继续等待有人阅读,因为它认为某个进程正在尝试从中读取?

1 个答案:

答案 0 :(得分:1)

我认为你的输入和输出混淆了。

command1只写入command2正在读取的管道 - 当该管道处于活动状态时(即command2尚未死亡或主动关闭其输入描述符),command1将继续尝试在其中发送其输出(或者直到command1本身完成。)

如果command1完成,并且它已设法将其所有'输出发送到STDOUT(它是管道的输入端),它将退出,并且管道的那一端将被关闭。如果command2仍然从其'STDIN(管道的输出端)读取,它将能够获取最后一个数据,并将看到文件结束条件。

另一方面,如果command2在command1完成发送之前手动关闭其输入或退出,则下一次command1尝试写入STDOUT时,会出现“管道损坏”错误。

希望这可以解决一些问题。