Scons带有时间限制的命令

3

我希望限制Linux下运行的程序的执行时间。我在我的scons脚本中添加了如下一行:

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

我使用一个无限循环的程序进行了测试,但它没有起作用,程序一直运行。

我是否漏掉了什么?

-- tsf

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

编辑:似乎在Ubuntu 9.04中,-t选项有问题。修复程序已于2009年6月5日提交,但可能需要一段时间才能传播到更新中——可能要等到9.10才能解决。
值得一提的是,这个问题在Ubuntu 10.04中已经不存在了。

我的程序无限循环是这样的(用C语言表示): while (1) x = 1;因此它没有休眠。 -- tsf - Tsf
似乎这不是Scons的问题!我尝试了 ulimit -t 1; ./myprogram它在Linux Fedora安装下工作正常(被中断),但在Ubuntu下无法工作。我需要检查它是否取决于某些配置值。谢谢! - Tsf
啊!我在 openSUSE 上尝试过,它可以工作。但在 Ubuntu 上却什么都没有,没有错误,也没有在 1 秒钟后终止。 - richq

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接