2016-08-25 135 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信號;破損的管道是寫入端的問題,而不是讀取端。