【发布时间】:2018-10-26 15:43:52
【问题描述】:
在 ruby 中,我需要实现一个逻辑,当父进程退出/崩溃时,当前 Ruby 进程会自动终止。
我可以使用Process.ppid获取父进程ID,但是Process模块上的所有等待方法都是针对子进程的。
有没有办法等待非子进程退出?
【问题讨论】:
-
处理!我在 Windows 上使用它,需要等待 Windows 进程退出。
标签: ruby
在 ruby 中,我需要实现一个逻辑,当父进程退出/崩溃时,当前 Ruby 进程会自动终止。
我可以使用Process.ppid获取父进程ID,但是Process模块上的所有等待方法都是针对子进程的。
有没有办法等待非子进程退出?
【问题讨论】:
标签: ruby
@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 返回另一个 pidProcess.exit!终止子进程如需了解更多信息,请查看Process doc。
根据文档,Process 类在不同的操作系统上以非常不同的方式工作。
【讨论】: