我希望限制我在Linux下运行的程序的执行时间。我把我的scons的脚本中的一行:

命令( “COM”, “”, “的ulimit -t 1; myprogram”)

和与无限循环程序测试了它:它不工作,程序永远运行

我缺少的东西吗?

- TSF

有帮助吗?

解决方案

ulimit -t 1意味着该限制设置为CPU时间1秒。如果你的无限循环的程序使用任何类型的sleep在其内部循环,然后它会使用几乎没有CPU时间。这意味着它不会在真正的1秒被打死,时钟时间。事实上,它可能需要几分钟或几小时到用尽其1秒分配。

如果您使用SCons之外运行的命令,会发生什么?也许你没有权限做任何改动的限制...

ulimit -t 1; ./myprogram

例如,可以说以下,如果限制已经被设置为0:

bash: ulimit: cpu time: cannot modify limit: Operation not permitted

编辑:似乎 -t选项被破坏在Ubuntu 9.04 。一个修复程序一直致力于2009年6月05,但它可能需要一段时间慢慢地流进更新 - 它可以不是固定的,直到9.10

作为一个历史说明,这个问题不再在Ubuntu 10.04存在。

其他提示

您也可以使用这个脚本:

/:

(来自 HTTP采取/newsgroups.derkeiler.com/Archive/Comp/comp.sys.mac.system/2005-12/msg00247.html

#!/bin/sh
# timeout script
#
usage()
{
echo "usage: timeout seconds command args ..."
exit 1
}

[[ $# -lt 2 ]] && usage
seconds=$1; shift

timeout()
{
sleep $seconds
kill -9 $pid >/dev/null 2>/dev/null
}

eval "$@" &
pid=$!
timeout &
wait $pid
.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top