题
我希望限制我在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
.
不隶属于 StackOverflow