【发布时间】:2016-10-10 22:00:35
【问题描述】:
当你想为一个进程设置时间限制时,你可以简单地在进程前使用timeout:
timeout 1.5s COMMAND
如果 1.5 秒后没有完成,这将杀死 COMMAND。
我在一些 bash 脚本中使用了该命令;我如何知道一个进程是否在时间限制之前完全完成,或者它被杀死(因为超过时间限制)?
【问题讨论】:
标签: linux bash terminal timeout
当你想为一个进程设置时间限制时,你可以简单地在进程前使用timeout:
timeout 1.5s COMMAND
如果 1.5 秒后没有完成,这将杀死 COMMAND。
我在一些 bash 脚本中使用了该命令;我如何知道一个进程是否在时间限制之前完全完成,或者它被杀死(因为超过时间限制)?
【问题讨论】:
标签: linux bash terminal timeout
如果超时,Gnu timeout 命令通常会返回状态码 124。否则,它返回命令本身返回的状态码。所以你可以在执行timeout后立即抓取$?的值来测试状态码:
timeout 1.5s COMMAND
status=$?
if ((status==124)); then
# command timed out
elif (status!=0)); then
# command terminated in time, but it returned an error status
else
# command terminated in time and reported success
fi
如果您的命令可能返回状态码 124,那么您必须使用 --preserve-status 选项并检查命令是否被您告诉 timeout 发送的信号终止。详情请见man timeout。
【讨论】:
在COMMAND之后添加&& echo >> time_limit.txt:
timeout 1.5s COMMAND && echo >> time_limit.txt
所以,如果您想查看COMMAND 是否被杀死,请检查文件time_limit.txt 是否存在。如果该文件存在,则意味着该命令未被终止。否则,该命令被终止。
在 bash 脚本中,您可以检查该文件是否存在,如下所示:
if [[ -r time_limit.txt ]]then;
{
echo "The command was NOT killed"
}
else
{
echo "The command was killed"
}
【讨论】: