【发布时间】:2015-12-10 15:49:34
【问题描述】:
有没有办法在 Linux 中根据 CPU 执行该程序所花费的实际时间而不是挂钟时间来为程序设置超时? 可能是系统负载过重,或者有很多上下文切换会使挂钟超时测量值无法比较。 我正在寻找 Python、C 或 Bash 中的解决方案。
【问题讨论】:
有没有办法在 Linux 中根据 CPU 执行该程序所花费的实际时间而不是挂钟时间来为程序设置超时? 可能是系统负载过重,或者有很多上下文切换会使挂钟超时测量值无法比较。 我正在寻找 Python、C 或 Bash 中的解决方案。
【问题讨论】:
这是我编写的与timeout 命令类似的shell 脚本。
ctimeout timeout command arg ...
如果命令的 CPU 时间超过超时值(以秒为单位),该命令将被终止。
它使用ulimit -t 内置命令。底层系统调用setrlimit 将 CPU 时间的秒数作为其参数,因此 timeout 参数应该是一个整数。 bash 的ulimit -t 拒绝带小数点的参数。 ksh 接受带小数点的参数,但会向下舍入到最接近的整秒。
任何带有嵌入空格的参数都应该用\' 或\" 包围。
#!/bin/sh
if test $# -lt 2
then
echo "Usage: $0 timeout command arg ..."
exit 126
fi
ulimit -t $1 || { echo "Error: cannot set timeout $1"; exit 126; }
shift
eval "$@"
【讨论】: