@ Ашутош, проверьте следующий пример, который представляет решение для логики, которую вы упомянули.
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
работает в разных ОС очень по-разному.