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

时间:2011-07-05 21:41:15

标签: python process twisted multiprocessing zombie-process

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

1 个答案:

答案 0 :(得分:6)

zombie是一个已经完成的过程,但是启动它的过程尚未注意到它的完成。这是扭曲过程的责任,收获子女。

如果您使用spawnProcess开始此过程,则所有内容应始终按预期工作。然而,正如bug #733 in Twisted(已经修复了很久)所描述的那样,当你想将Twisted与其他产生进程的函数一起使用时,会出现大量令人讨厌的边缘情况,因为Python的API在历史上很难在信号处理程序。

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

  1. 您使用的是早于10.1的Twisted版本。
  2. 您使用的是早于2.6的Python版本。
  3. 您没有构建Twisted的原生扩展模块(如果您使用的是开发结帐或解压缩的tarball而不是已安装的版本,则可以使用python setup.py build_ext -i修复此问题。)
  4. 您使用的是popensubprocess
  5. 等模块

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