在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
类在不同的操作系统上以非常不同的方式工作。