Отслеживание детей из старых сценариев - PullRequest
0 голосов
/ 10 марта 2011

У меня есть Perl-скрипт, который порождает некоторых детей.Все они занимают много времени, создавая каталоги и файлы по пути.Я часто замечаю вещи, которые хотел бы изменить, прежде чем дети умирают по естественным причинам, поэтому мне приходится закрывать все (что включает несколько вызовов grep и kill) и удалять любые файлы, созданные детьми.Это не так уж важно, но немного боли в шее.Я хотел бы создать установку, в которой все дети отслеживаются, поэтому, когда я снова запускаю родителя, сообщается о старых работающих детях, которые все еще работают.

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

Итак, мой вопрос заключается в следующем: как я могу добавить детей в файл журнала?Есть ли способ настроить триггер, который мог бы автоматически позаботиться о нем, или я застрял, чтобы не забыть сделать это в любом месте кода, где начинается новый процесс?

ps Я, конечно, открытна предложения о лучших способах достижения этого!

1 Ответ

0 голосов
/ 10 марта 2011

Как насчет обработчиков сигналов ?Родитель может отслеживать pids запущенных заданий (и, если хотите, pids, которые были получены с помощью обработчика SIGCHLD).Если вы хотите прекратить все преждевременно, попросите родителя убить всех детей и очистить их.Если дочерние процессы также являются сценариями Perl, вы можете поместить обработчики сигналов в дочерние процессы и посмотреть, будут ли они очищаться после себя.

...