Ruby ждет завершения процесса - PullRequest
0 голосов
/ 26 октября 2018

В ruby ​​мне нужно реализовать логику, в которой текущий процесс Ruby автоматически завершается при выходе / сбое родительского процесса.

Я могу получить идентификатор родительского процесса, используя Process.ppid, но все методы ожиданияв модуле «Процесс» предназначены для дочерних процессов.

Есть ли способ дождаться завершения процесса, не являющегося дочерним процессом?

1 Ответ

0 голосов
/ 28 октября 2018

@ Ашутош, проверьте следующий пример, который представляет решение для логики, которую вы упомянули.

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 работает в разных ОС очень по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...