我有一个有效的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”)。
答案 0 :(得分:1)
我的问题是C流程忽略了SIGCHLD
。由于被忽略的信号是由分叉进程继承的,因此Python进程也忽略了它,这使得waitpid()
失败。
解决方案:在分配到SIG_DFL
后,如果您忽略了任何内容,请在C流程中设置信号处理程序。