timeout
的以下命令行调用(由于测试原因没有意义)不能按预期工作。它会等待10秒钟,并且在3秒后不会停止命令。为什么?
timeout 3 ls | sleep 10
答案 0 :(得分:11)
您的命令正在运行timeout 3 ls
并将其输出汇总到sleep 10
。因此,sleep
命令不受timeout
的控制,并且将始终睡眠10秒。
这样的事情会产生预期的效果。
timeout 3 bash -c "ls | sleep 10"
答案 1 :(得分:3)
'ls'命令不应该花3秒钟运行。我认为正在发生的事情是你说(1)3秒后ls超时(再次发生这种情况不会发生,因为ls不应该花费3秒左右的时间来运行),然后(2)将结果输入睡眠10不需要进一步的参数而不是你给它的数字。因此ls发生,超时无关紧要,bash睡了10秒钟。
答案 2 :(得分:1)
我知道如何获得效果的唯一方法是将管道命令放入单独的文件中:
cat > script
ls | sleep 10
^D
timeout 3 sh script
答案 3 :(得分:0)
在管道的 last 命令上设置超时就足够了:
# Exits after 3 seconds with code 124
ls | timeout 3 sleep 10
# Exits after 1 second with code 0
ls | timeout 3 sleep 1