Ruby等待进程退出

时间:2018-10-26 15:43:53

标签: ruby

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

我可以使用Process.ppid获取父级的进程ID,但是Process模块​​上的所有wait方法都用于子进程。

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

1 个答案:

答案 0 :(得分:1)

@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 doc

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