ruby中的线程安全外部进程,加上检查exitstatus
我想在Ruby中运行一段线程安全的脚本,调用一个外部程序,然后检查该外部程序的退出状态。最好的方法是什么?到目前为止,我一直在检查ruby中的线程安全外部进程,加上检查exitstatus,ruby,thread-safety,Ruby,Thread Safety,我想在Ruby中运行一段线程安全的脚本,调用一个外部程序,然后检查该外部程序的退出状态。最好的方法是什么?到目前为止,我一直在检查$?,但我认为我得到了程序其他部分的竞争条件 下面是一些示例代码: Thread.new do `external_program` if $?.exitstatus == 0 # it worked. else # it didn't work. end end 理想情况下,我会做类似的事情 Process.new(`externa
$?
,但我认为我得到了程序其他部分的竞争条件
下面是一些示例代码:
Thread.new do
`external_program`
if $?.exitstatus == 0
# it worked.
else
# it didn't work.
end
end
理想情况下,我会做类似的事情
Process.new(`external_program`).exitstatus
因此,退出状态与这一过程密不可分,而不是碰巧完成的最后一个过程。有什么方法可以做到这一点吗?虽然rb_last_status(又名
$?
)是一个全局变量,但Ruby为每个线程做了一个魔术:在rb_thread_save_context
中,它将rb_last_status
存储在旧线程的结构中<代码>rb_线程\u还原\u上下文根据保存的值设置rb_上次\u状态
。如果你有一个涉及$?
的竞态条件,那就是一个Ruby bug。@Wayne-这就是我来stackoverflow的原因;像你这样知道背景信息的人。谢谢@彼得,不客气。我不知道这一点,直到你问我,并给了我一个理由去挖掘来源。我喜欢挖掘。脚本是开源的还是私有的?@安德鲁:开源的(这是我的脚本)。