У меня есть скрипт perl с несколькими дочерними процессами, сгенерированными с помощью fork. Родитель обрабатывает SIGINT, а дочерние процессы игнорируют SIGINT ($ SIG {INT} = 'IGNORE').Почему дети не становятся зомби в perl
$SIG{'INT'} = sub {
print "Caught Ctrl+C by $$\n";
# while($result != -1){
# $result = wait();
#}
die "Stopping...";
};
a) Если включить прокомментированные строки, скрипт ждет, пока дети завершатся, а затем выйдут.
б) Но если я комментирую линию «ждать» Я предполагаю, что это работает, как этот - выходы сценария и родительский процесс завершается - дети продолжают работать в фоновом режиме и отображать некоторое сообщение, как ожидаются, перед выходом.
Я понимаю а) случай, но как работает б) работа, пожалуйста, объясните, почему это не порождает процессы зомби?
Этот вопрос простирается/связан с Wait for children to complete if parent intercepts SIGINT
Итак, в моем случае дети становятся «сиротскими процессами» (а не зомби) и принимаются init. Если да, то что создаст зомби? (Я пробовал НЕ игнорировать сигнал от детей, но это все еще выглядит нормально). .. Я прочитал некоторую информацию, но все еще не могу четко определить, когда именно я получаю зомби против сироты (в контексте перехвата SIGINT в родительском и дочернем) –
«Зомби» - это процесс, который вышел, но его родительский но называется 'wait', чтобы получить статус выхода. Всякий раз, когда родитель вызывает 'wait', чтобы получить статус выхода или завершения, зомби будет очищен. –