有没有办法在Linux上的程序中设置超时,这将根据CPU执行该程序所花费的实际时间而不是挂钟时间来强制执行? 可能是系统负载很重,或者有很多上下文切换会使挂钟超时测量无法比较。 我正在寻找Python,C或Bash的解决方案。
答案 0 :(得分:3)
这是我编写的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 "$@"