通过Ruby:运行ulimit和同一行中的程序

时间:2013-01-17 09:22:37

标签: ruby sh ulimit

我试图通过以下命令从Ruby运行一些计算密集型程序:

%x(heavy_program)

但是,我有时想限制程序的运行时间。所以我试着做了

%x(ulimit -St #{max_time} & heavy_program)

但似乎失败了; “&”即使我在Ruby之外运行的sh shell中尝试它,技巧也不起作用。

我确信有更好的方法可以做到这一点......

1 个答案:

答案 0 :(得分:3)

使用&&;

%x(ulimit -St #{max_time} && heavy_program)

%x(ulimit -St #{max_time}; heavy_program)

但是,使用ulimit可能不是您真正需要的,请考虑以下代码:

require 'timeout'
Timeout(max_time){ %x'heavy_program' }

ulimit限制 CPU时间timeout限制总运行时间,因为我们人类通常会计算它。

因此,例如,如果您使用sleep 999999运行ulimit -St 5 shell命令 - 它将运行不会持续5秒,但对于所有999999,因为sleep使用的数量可以忽略不计 CPU时间