gpt4 book ai didi

ruby - ruby 中的线程安全外部进程,以及检查退出状态

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:45 25 4
gpt4 key购买 nike

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

下面是一些示例代码:

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

理想情况下,我会做类似的事情

Process.new(`external_program`).exitstatus

因此 exitstatusthat 进程密不可分,而不是恰好完成的最后一个进程。有什么办法吗?

最佳答案

虽然 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com