Процессы зомби, появляющиеся, когда я порождаю процессы - PullRequest
6 голосов
/ 11 марта 2010

У меня есть кусочки кода, где я запускаю дочерние процессы, чтобы сделать его более эффективным. Тем не менее, они, похоже, создают всевозможные процессы зомби, которые блокируют сокеты и разрушают сайт.

spawn(:method => :thread) do
   if @login_user.suggested_group_info.new_record?
       xxx
   end
end

1) Почему это создает процессы зомби? 2) Как я могу написать код, чтобы убедиться, что убил процесс, прежде чем он станет зомби?

Ответы [ 2 ]

4 голосов
/ 11 марта 2010

Вы должны сохранить PID порожденного процесса и выполнить системный вызов waitpid (2) после его смерти. (Я не знаю, как это делает Руби.)

2 голосов
/ 02 августа 2012

Вы также можете заманить ребенка в ловушку, чтобы очистить процесс зомби

trap("CLD") {
  pid = Process.wait
  puts "Child pid #{pid}: terminated"
}
...