Python Popen.waitpid 返回 “[Errno 10] 没有子进程”
我有一个能正常工作的Python脚本,它会执行一个外部命令,并调用 Popen.communicate()
。但是,当我从一个C程序中调用这个脚本时,它在 os.waitpid()
这一步失败了,错误信息是 "[Errno 10] No child processes"。这是为什么呢?
这看起来像是 Python中的一个特定错误,不过我并没有使用线程。
这个C程序会进行分叉(fork),然后改变它的用户ID(UID)和组ID(GID),接着调用 setsid()
,最后用 execle()
来执行("/bin/sh -c /python/script")。
1 个回答
1
在我的情况中,问题是C程序忽略了SIGCHLD
这个信号。因为被忽略的信号会被子进程继承,所以Python进程也忽略了这个信号,这导致waitpid()
函数无法正常工作。
解决办法:在C程序中,如果你之前忽略了某个信号,在创建子进程后要把这个信号的处理方式设置回默认值SIG_DFL
。