Python Popen.waitpid返回“[Errno 10]无子进程”

时间:2010-07-13 06:03:32

标签: python linux process fork

我有一个有效的Python脚本,它执行外部命令并调用Popen.communicate()。但是,当我从C进程调用此脚本时,它在os.waitpid()中失败并显示“[Errno 10] No child processes”。 为什么?

这看起来像a certain bug in Python,但我没有使用线程。

C进程分叉,更改其UID,GID,并调用setsid()然后调用execle()(使用“/ bin / sh -c / python / script”)。

1 个答案:

答案 0 :(得分:1)

我的问题是C流程忽略了SIGCHLD。由于被忽略的信号是由分叉进程继承的,因此Python进程也忽略了它,这使得waitpid()失败。

解决方案:在分配到SIG_DFL后,如果您忽略了任何内容,请在C流程中设置信号处理程序。