Ruby等待进程退出



在ruby中,我需要实现一个逻辑,当父进程退出/崩溃时,当前ruby进程会自动终止。

我可以使用process.ppid获取父进程的进程ID,但process模块上的所有等待方法都是针对子进程的。

有没有办法等待非子进程的退出?

@Ashutosh,检查下面的示例,该示例为您提到的逻辑提供了解决方案。

Process.fork { 
ppid = Process.ppid
while true do
puts "Dad is #{ppid}" 
sleep(1)
if ppid != Process.ppid
puts 'Dad has gone to sleep, so have I'
Process.exit!(true)
end
end
}
for i in 1..5 do
puts "I am #{Process.pid}"
sleep(2)
end

输出:

I am 3299
Dad is 3299
Dad is 3299
I am 3299
Dad is 3299
Dad is 3299
I am 3299
Dad is 3299
Dad is 3299
I am 3299
Dad is 3299
Dad is 3299
I am 3299
Dad is 3299
Dad is 3299
Dad is 3299
Dad has gone to sleep, so have I

说明:

  • 有一个子进程由Process.fork派生
  • 一开始,我们保存父id,因为在父终止后,Process.ppid返回另一个pid,它不属于真正的父
  • 当父级终止时,Process.ppid返回另一个pid
  • 为了安全起见,使用Process.exit!终止子进程

有关详细信息,请参阅Process文档。

根据文档,Process类在不同的操作系统上以非常不同的方式工作。

相关内容

  • 没有找到相关文章

最新更新