Танцор под Плакапом и Старманом; разветвление листьев несуществующих звездных процессов?
В качестве продолжения моего второго вопроса здесь: Форкирование запуска кода в дочернем процессе с помощью Perl's Dancer - как мне разветвить запрос, выполняемый в plackup/starman/dancer, не оставляя ребенка в состоянии зомби?
например из того, что я пытаюсь сделать:
post '/handle_data' => sub {
# perform some calculations
...
# store some data
...
fork and return; # parent request
# do some long running tasks
...
exit; # child
};
... приводит к тому, что рабочий звёздного завода перерабатывается, но оставшийся процесс приостановки прекращается.
Из perlipc я тоже пробовал настройку $SIG{CHLD} = "IGNORE"
, но безрезультатно.
1 ответ
При разветвлении родительский процесс не завершается, а скорее ждет дочерний pid. Если я вспоминаю fork
устанавливает либо возвращаемое значение, либо специальную переменную с pid дочернего элемента; так что вам нужно поймать это. Ох и зарегистрируйся $SIG{INT}
обработчик, который так же ждет.
Вы, вероятно, хотите использовать waitpid.