Ошибка дочерних процессов отсутствует… снова

#python #linux #fork #signals

#python #linux #вилка #сигналы

Вопрос:

У меня запущен процесс (назовите его main proc, если хотите), который что-то делает. В какой-то момент он запускает процесс, скажем, proc1, который делает что-то еще. В какой-то другой момент proc1 решает, что ему нужен дочерний процесс для выполнения некоторых обязанностей, назовем его proc2.

proc2 выполняет свою работу или выполняется в бесконечном цикле, после чего proc1 отправляет сигнал sigterm своему дочернему proc2. В любом случае, в любом случае proc2 завершается чисто. Пока proc2 выполняет необходимые действия, proc1 ожидает завершения proc2. Когда waitpid() сообщает proc2 как завершенный, proc1 отправляет сам sigterm и завершает работу. В этот момент основной процесс выполнял проверку с помощью waitpid (pid, WNOHANG) в цикле. Когда proc1 завершает мой идентификатор ожидания из основного процесса, выдает ошибку: * Ошибка в atexit._run_exitfuncs: Ошибка: [Ошибка 10] Нет дочерних процессов * и ошибка в sys.exitfunc: Ошибка: [Ошибка 10] Нет дочерних процессов.

Из того, что я узнал, читая подобные вопросы, возникает проблема при обработке сигнала SIGCHLD. Если это проблема, то мне неясно, как ее решить. На данный момент я решил эту проблему, поместив waitpid() в основной процесс в блоке try except . Есть ли другие способы? есть ли лучшие способы?

Если это поможет, я могу добавить пример, с которым я возился, копируя ошибки. Заранее благодарю вас.

Комментарии:

1. Существуют лучшие шаблоны проектирования, чем этот. Разводить детей и ждать — это не оптимально. Посмотрите на docs.python.org/library/multiprocessing.html .