代码之家  ›  专栏  ›  技术社区  ›  Peter

Ruby中的线程安全外部进程,以及检查exitstatus

  •  9
  • Peter  · 技术社区  · 15 年前

    我想在Ruby中运行一段线程安全的脚本,它调用一个外部程序,然后检查该外部程序的退出状态。最好的方法是什么?到目前为止,我一直在检查 $? 但我想我和其他部分的比赛条件。

    下面是一些示例代码:

    Thread.new do
      `external_program`
      if $?.exitstatus == 0
        # it worked.
      else
        # it didn't work.
      end
    end
    

    理想情况下,我会做一些像

    Process.new(`external_program`).exitstatus
    

    以便 exitstatus 不可分割地 那个 进程,而不是最后一个碰巧完成的进程。有什么办法吗?

    1 回复  |  直到 14 年前
        1
  •  17
  •   Wayne Conrad    15 年前

    尽管Rb_Last_状态(aka $? )是一个全局变量,Ruby做了一个魔术,使它每线程:在 rb_thread_save_context IT商店 rb_last_status 在旧的螺纹结构中; rb_thread_restore_context 集合 RB U Last U状态 从保存的值。如果你有涉及 $? 是红宝石虫。