Танцор под Плакапом и Старманом; разветвление листьев несуществующих звездных процессов?

В качестве продолжения моего второго вопроса здесь: Форкирование запуска кода в дочернем процессе с помощью 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.

Другие вопросы по тегам