Python Popen.waitpid возвращает «[Errno 10] Нет дочерних процессов» - PullRequest
2 голосов
/ 13 июля 2010

У меня есть рабочий скрипт Python, который выполняет внешнюю команду и вызывает Popen.communicate().Однако, когда я вызываю этот сценарий из процесса C, он завершается с ошибкой в ​​os.waitpid() с «[Errno 10] Нет дочерних процессов». Почему?

Это похоже на определенную ошибку в Python , но я не использую потоки.

Процесс C разветвляется, изменяет егоUID, GID и вызовы setsid(), а затем execle() (с помощью "/ bin / sh -c /python/script").

1 Ответ

1 голос
/ 14 июля 2010

Проблема в моем случае заключалась в том, что процесс C игнорировал SIGCHLD.Поскольку игнорируемые сигналы наследуются разветвленным процессом, процесс Python также игнорировал его, что приводило к ошибке waitpid().

Решение: установка обработчиков сигналов в процессе C после разветвления на SIG_DFL, если вы проигнорировали.

...