作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我想在 Ruby 中运行一段调用外部程序的线程安全脚本,然后检查该外部程序的退出状态。最好的方法是什么?到目前为止,我一直在检查 $?
,但我认为我遇到了与程序其他部分的竞争条件。
下面是一些示例代码:
Thread.new do
`external_program`
if $?.exitstatus == 0
# it worked.
else
# it didn't work.
end
end
理想情况下,我会做类似的事情
Process.new(`external_program`).exitstatus
因此 exitstatus
与 that 进程密不可分,而不是恰好完成的最后一个进程。有什么办法吗?
最佳答案
虽然 rb_last_status(又名 $?
)是一个全局变量,但 Ruby 做了一个魔术让它成为每个线程:在 rb_thread_save_context
中,它存储 rb_last_status
在旧线程的结构中; rb_thread_restore_context
从保存的值设置 rb_last_status
。如果您遇到了涉及 $?
的竞争条件,那么这是一个 Ruby 错误。
关于ruby - ruby 中的线程安全外部进程,以及检查退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2164887/
我是一名优秀的程序员,十分优秀!