我希望限制Linux下运行的程序的执行时间。我在我的scons脚本中添加了如下一行:
Command("com","","ulimit -t 1; myprogram")
我使用一个无限循环的程序进行了测试,但它没有起作用,程序一直运行。
我是否漏掉了什么?
-- tsf
我希望限制Linux下运行的程序的执行时间。我在我的scons脚本中添加了如下一行:
Command("com","","ulimit -t 1; myprogram")
我使用一个无限循环的程序进行了测试,但它没有起作用,程序一直运行。
我是否漏掉了什么?
-- tsf
ulimit -t 1
意味着 CPU 时间限制为 1 秒。如果您的无限循环程序在其内部循环中使用任何类型的 sleep
,则它将几乎不使用 CPU 时间。这意味着它不会在实际上的时钟时间的 1 秒内被终止。事实上,可能需要几分钟或几小时才能使用完其 1 秒的分配。
如果您在 SCons 之外运行该命令会发生什么?也许您根本没有权限更改限制...
"ulimit -t 1; ./myprogram
bash: ulimit: cpu time: cannot modify limit: Operation not permitted
你也可以使用这个脚本:
(来自 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
.