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