我正在寻找像Linux" timeout"命令,允许timouet值小于1秒。我正在使用解决方案here,但我遇到了一个问题。
问题在于,有时会打印此消息,而我正试图找出原因。
./tools/utimeout.sh: line 17: 12369 Terminated $(./tools/usleep $TIMEOUT ; kill $PROC &> /dev/null)
我尝试修改解决方案,以便在脚本退出之前杀死子进程,但这没有帮助。
#!/bin/bash
TIMEOUT=400000
#execute command in background
"$@" &
#get process ID
PROC=$!
#sleep for 10 milliseconds then kill command
(./tools/usleep $TIMEOUT ; kill $PROC &> /dev/null) &
CPROC=$!
wait $PROC &> /dev/null
kill $CPROC &> /dev/null
if [ $? -eq 1 ]; then
# echo "Process timed out."
exit 1
else
# echo "Process completed successfully."
exit 0
fi
由于我想从这个脚本捕获stderr,作为解决方法,我只是用sed从错误日志中删除消息。由于这是一个黑客,我希望找到一个更好的解决方案。
答案 0 :(得分:2)
要避免此消息,您可以取消该过程
(./tools/usleep $TIMEOUT ; kill $PROC &> /dev/null) &
disown %
然后你不能等待它,或者你可以把它放在子shell中:
( (./tools/usleep $TIMEOUT ; kill $PROC &> /dev/null) & )
但当然你不能把它当作$!不对。
我的fedora 21超时需要浮点持续时间:
$ time timeout .1 sleep 1
real 0m0.103s
user 0m0.002s
sys 0m0.002s