2016-08-25 133 views
0

有人可以解释timeout如何管理管道命令吗?例如,对管道命令的超时调用

timeout 2s a | b 

这里只对本a命令所施加的timeout
如果确实发生超时,是否会导致管道损坏?

+2

是的,'timeout'是一个普通的命令,不是内建的,所以它的参数是'timeout','2s'和'a'。如果发生超时,一旦所有数据已经​​被读取(因为没有任何进程写入管道),'b'的管道将指示EOF。但是破损的管道在写入方面是一个问题,而不是读取方面。 –

+0

@JonathanLeffler:谢谢,管好:) – sjsam

回答

1

是的,timeout是一个常规命令,不是内置的,所以它被执行的参数为timeout,2sa。如果发生超时,那么b中的管道读取结束将指示EOF,一旦其中的所有数据都被读取(因为没有可写入管道的进程)。但b将不会从a退出(无论是因为超时还是因为它在超时之前完成)而收到SIGPIPE信号;破损的管道是写入端的问题,而不是读取端。