有没有办法在 Linux 中根据 CPU 执行该程序所花费的实际时间而不是挂钟时间来强制执行程序超时? 可能是系统负载很重或者有很多上下文切换会使挂钟超时测量无法比较。 我正在寻找 Python、C 或 Bash 的解决方案。
最佳答案
这是我编写的一个 shell 脚本,类似于 timeout命令。
ctimeout timeout command arg ...
如果其 CPU 时间超过超时值(以秒为单位),该命令将被终止。
它使用 ulimit -t内置命令。底层系统调用,setrlimit , 将 CPU 时间的秒数作为其参数,因此超时参数应为整数。 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 "$@"
关于Linux:超时基于 CPU 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206171/