SH:运行的ulimit和在同一行程序
问题描述:
我想通过下面的命令在Ruby中运行一些计算密集型程序:SH:运行的ulimit和在同一行程序
%x(heavy_program)
不过,我有时想限制运行时间的程序。所以我试着做
%x(ulimit -St #{max_time} & heavy_program)
但是它似乎失败了;即使当我在Ruby之外的正在运行的sh shell中尝试时,“&”技巧也不起作用。
我敢肯定有这样做的更好的办法...
答
兼用&&
或;
:
%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
限制了总运行时间,因为我们人类通常会计算它。
因此,举例来说,如果您运行ulimit -St 5
sleep 999999
shell命令 - 它不会运行5秒钟,但对于所有的999999因为sleep
使用的CPU时间可以忽略不计
谢谢!你能否详细说明“&”,“&&”和“;”之间的区别在这种情况下? –
'&'表示在后台运行指定的任务,并且它不可能从ruby的'%x'工作; 'cmdA && cmdB'表示“仅在cmdA成功时运行cmdB”; 'CMDA; cmdB'表示“首先运行cmdA,然后cmdB” –
太好了,再次感谢! –