2011-09-21 256 views
0

我正在尝试编写一个应用程序,允许用户启动长时间运行的计算过程(例如几个小时)。为此,我使用Python Popen()函数。只要主塔架进程正常,一切都很好,但是当我重新启动塔架进程时,如果有任何僵尸进程从之前的贴图启动中遗留下来,它就不会响应任何请求。主塔和僵尸进程

什么可能是这个问题的根源或解决方法?

在此先感谢,伊万。

回答

1

为了避免僵尸进程,孩子必须做一个双叉分离自己的控制过程。请参阅http://en.wikipedia.org/wiki/Zombie_process

所以您只需要让您的子进程再次分叉 - 同时小心保持相关文件句柄处于打开状态,以便您仍可以进行通信。

+0

在Linux和Windows上都有替代方法吗? –

-1

您需要某种消息传递。这可能通过安装信号处理程序来完成。 Python有signal模块,Popensend_signal方法。

也许http://www.doughellmann.com/PyMOTW/subprocess/#signaling-between-processes也可以帮助你。

+0

我想你不明白我的问题。我使用0mq在进程之间传递数据,但如果还有僵尸进程,则Web服务器进程会冻结。目标是了解问题的根源,并学习如何使Pylons过程正常工作。 –

+0

嗯,我以为你想避免僵尸进程... – rocksportrocker

+0

最好的选择将是接他们并继续与他们沟通。避免僵尸进程的主要问题是,Web服务器进程可以在没有任何警告的情况下终止,因此没有简单的方法可以知道它是否仍在运行。 –