我想限制我在 Linux 下运行的程序的执行时间。我在我的 scons 脚本中加入了如下一行:
Command("com","","ulimit -t 1; myprogram")
并用一个无限循环程序对其进行了测试:它不起作用,程序永远运行。
我错过了什么吗?
-- tsf
我想限制我在 Linux 下运行的程序的执行时间。我在我的 scons 脚本中加入了如下一行:
Command("com","","ulimit -t 1; myprogram")
并用一个无限循环程序对其进行了测试:它不起作用,程序永远运行。
我错过了什么吗?
-- tsf
ulimit -t 1
表示限制设置为 1 秒的 CPU 时间。如果您的无限循环程序在其内部循环中使用任何类型的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 月 5 日提交了修复程序,但可能需要一段时间才能进入更新 - 它可能要到 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
.