我想在Ruby中运行一段线程安全的脚本,它调用一个外部程序,然后检查该外部程序的退出状态。最好的方法是什么?到目前为止,我一直在检查 $? 但我想我和其他部分的比赛条件。
$?
下面是一些示例代码:
Thread.new do `external_program` if $?.exitstatus == 0 # it worked. else # it didn't work. end end
理想情况下,我会做一些像
Process.new(`external_program`).exitstatus
以便 exitstatus 不可分割地 那个 进程,而不是最后一个碰巧完成的进程。有什么办法吗?
exitstatus
尽管Rb_Last_状态(aka $? )是一个全局变量,Ruby做了一个魔术,使它每线程:在 rb_thread_save_context IT商店 rb_last_status 在旧的螺纹结构中; rb_thread_restore_context 集合 RB U Last U状态 从保存的值。如果你有涉及 $? 是红宝石虫。
rb_thread_save_context
rb_last_status
rb_thread_restore_context
RB U Last U状态