【问题标题】:sh via Ruby: Running ulimit and a program in the same linesh via Ruby:在同一行中运行 ulimit 和程序
【发布时间】:2013-01-17 09:22:36
【问题描述】:

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

%x(heavy_program)

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

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

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

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

【问题讨论】:

    标签: ruby sh ulimit


    【解决方案1】:

    使用&& 或;:

    %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”
    猜你喜欢
    • 1970-01-01
    • 2022-08-23
    • 2016-04-01
    • 2011-02-05
    • 2023-03-08
    • 2015-04-04
    • 2014-07-04
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多