У меня есть сценарий, который используется для повторного развертывания нескольких программ в пользовательской среде сервера (т. Е. Не установленный стандартный контейнер, в котором есть код горячей замены). Для этого он отключает серверные процессы, но для полного закрытия всех их соединений требуется некоторое время. Это не дочерние процессы perlscript. Обычно они запускаются в течение сотен дней за раз, поэтому я бы предпочел не оборачивать серверные процессы в perlscripts, просто чтобы я мог разветвить их, чтобы элегантно завершить их месяцы или годы спустя.
Так что в настоящее время, чтобы дождаться их смерти во время повторного развертывания, я анализирую вывод ps -ef
, захватывая поле pid, убив этот pid, ожидая 60 секунд (что кажется разумным временем для этих процессов), перепроверяя ps -ef
чтобы убедиться, что они мертвы и т. д. Продолжайте копировать, chmods и т. д.
Это решение кажется мне хромым / неуклюжим. Я гуглил по всему и не видел ничего по этой конкретной теме; есть куча материала о том, как ждать на раздвоенных детях, и waitpid был бы идеальным, если бы он действовал таким образом.
Из прочтения Как ждать выхода из дочерних процессов (что является c
специфичным) Я предполагаю, что на самом деле я ничего не могу сделать, кроме чтения / proc / pid вместо этого , но я подумал, что, может быть, где-нибудь найдется специфичное для Perl решение. Есть идеи?