以下命令行調用timeout
(沒有意義,僅用於測試原因)不能按預期工作。它等待10秒,並且不會在3秒後停止命令的工作。爲什麼?爲什麼`timeout`不適用於管道?
timeout 3 ls | sleep 10
以下命令行調用timeout
(沒有意義,僅用於測試原因)不能按預期工作。它等待10秒,並且不會在3秒後停止命令的工作。爲什麼?爲什麼`timeout`不適用於管道?
timeout 3 ls | sleep 10
你的命令做的是運行timeout 3 ls
並將其輸出到管道sleep 10
。因此sleep
命令不在timeout
的控制之下,並且總是會休眠10秒。
這樣的事情會產生所需的效果。
timeout 3 bash -c "ls | sleep 10"
現在我可以看到我的錯誤了。很好的解決方法。非常感謝(再次),你真的幫了我很多。 – 2012-08-15 13:25:31
不是問題約翰。很高興我能幫上忙 :) – 2012-08-15 13:28:14
我知道如何讓你後的效果的唯一方法,就是把管道命令到一個單獨的文件:
cat > script
ls | sleep 10
^D
timeout 3 sh script
你可以使用進程替代來做內聯並避免臨時文件 - 'timeout 3 sh <(echo「ls | sleep 10」)' – 2012-08-15 13:31:35
你究竟期待什麼? – FrankieTheKneeMan 2012-08-13 22:20:11
@FrankieTheKneeMan我期望,'timeout'執行'ls |睡10'。由於'ls |睡眠10'將需要至少10秒鐘,'超時'應該停止它。但'超時'不會。 – 2012-08-14 08:54:39