如何扭曲和多处理.Process创建僵尸?

bit*_*cle 3 python process twisted multiprocessing zombie-process

在python中,使用twisted loopingcall,multiprocessing.Process和multiprocessing.Queue; 是否可以创建一个僵尸进程.如果是这样,那怎么样?

Gly*_*yph 6

一个僵尸是一个过程,它已经完成,但其建成尚未通过启动它的过程中注意到.这是扭曲过程的责任,收获自己的孩子.

如果你开始这个过程spawnProcess,一切都应该按预期工作.然而,正如Twisted中的bug#733(已经很久以前修复过)所描述的那样,当你想要将Twisted与产生进程的其他函数一起使用时,会出现大量令人讨厌的边缘情况,因为Python的API在历史上很难在信号处理程序.

这已在最新版本的代码中得到修复,但我相信您可能会在以下情况下遇到此错误:

  1. 您使用的是早于10.1的Twisted版本.
  2. 您使用的是早于2.6的Python版本.
  3. 您没有构建Twisted的本机扩展模块(如果您使用的是开发结帐或解压缩的tarball而不是已安装的版本,则可以使用此方法进行修复python setup.py build_ext -i).
  4. 您正在使用像popen或的模块subprocess.

希望升级Twisted或运行相应的命令将解决您的问题,但您仍应考虑使用spawnProcess,因为这样可以将进程输出视为reactor事件循环中的正常事件.