我想限制我在Linux下运行的程序的执行时间。我在我的scons脚本中输入了一行:
命令(“com”,“”,“ulimit -t 1; myprogram”)
并使用无限循环程序对其进行测试:它无效并且程序永远运行。
我错过了什么吗?
- tsf
答案 0 :(得分: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中不再存在此问题。
答案 1 :(得分: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
.