具有时间限制的Scons命令

问题描述 投票:3回答:2

我想限制我在Linux下运行的程序的执行时间。我在我的scons脚本中加入了一行:

Command("com​","",​"ulimit -t 1; myprogram")

并使用无限循环程序对其进行了测试:它不起作用,并且该程序永远运行。

我想念什么吗?

-tsf

scons
2个回答
4
投票

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

编辑:似乎是the -t option is broken on Ubuntu 9.04。已于2009年6月5日提交了一个修复程序,但可能需要花一些时间才能滴答这些更新-可能要到9.10才能修复。

作为历史记录,此问题在Ubuntu 10.04中不再存在。


0
投票

您也可以使用此脚本:

(从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
.
© www.soinside.com 2019 - 2024. All rights reserved.