在ruby中,我需要实现一个逻辑,当父进程退出/崩溃时,当前Ruby进程会自动终止。
我可以使用Process.ppid获取父级的进程ID,但是Process模块上的所有wait方法都用于子进程。
有没有办法等待非子进程的退出?
答案 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
分叉的子进程Process.ppid
返回另一个pid,它不属于真正的父代。Process.ppid
返回另一个pid Process.exit!
终止子进程有关更多信息,请查看Process
doc。
根据文档,Process
类在不同的操作系统上以多种方式工作。