【发布时间】:2015-08-27 13:44:40
【问题描述】:
我正在寻找像 Linux 的“超时”命令这样的工具,它允许 timuet 值小于 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 从错误日志中删除消息。由于这是一个 hack,我希望找到更好的解决方案。
【问题讨论】:
-
请改用
"$@" &,否则您的脚本将无法处理包含空格和模式特殊字符的参数。 -
另外,不要使用命令替换定时器进程;只需使用子shell:
(./tools... ) &. -
my
timeout命令接受小于 1 的浮点秒数。(fedora 21)。 -
你是对的。 (facepalm) 我想可能让我感到困惑的是,在 Ubuntu 中,似乎没有“usleep”命令。也许我感到困惑并在我的脑海中混淆了,认为没有允许时间少于一秒的超时命令。