Linux:根据CPU时间超时

时间:2015-12-10 15:49:34

标签: linux timeout

有没有办法在Linux上的程序中设置超时,这将根据CPU执行该程序所花费的实际时间而不是挂钟时间来强制执行? 可能是系统负载很重,或者有很多上下文切换会使挂钟超时测量无法比较。 我正在寻找Python,C或Bash的解决方案。

1 个答案:

答案 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 "$@"