我正在尝试编写一个应用程序,允许用户启动长时间运行的计算过程(例如几个小时)。为此,我使用Python Popen()
函数。只要主塔架进程正常,一切都很好,但是当我重新启动塔架进程时,如果有任何僵尸进程从之前的贴图启动中遗留下来,它就不会响应任何请求。主塔和僵尸进程
什么可能是这个问题的根源或解决方法?
在此先感谢,伊万。
我正在尝试编写一个应用程序,允许用户启动长时间运行的计算过程(例如几个小时)。为此,我使用Python Popen()
函数。只要主塔架进程正常,一切都很好,但是当我重新启动塔架进程时,如果有任何僵尸进程从之前的贴图启动中遗留下来,它就不会响应任何请求。主塔和僵尸进程
什么可能是这个问题的根源或解决方法?
在此先感谢,伊万。
为了避免僵尸进程,孩子必须做一个双叉分离自己的控制过程。请参阅http://en.wikipedia.org/wiki/Zombie_process
所以您只需要让您的子进程再次分叉 - 同时小心保持相关文件句柄处于打开状态,以便您仍可以进行通信。
您需要某种消息传递。这可能通过安装信号处理程序来完成。 Python有signal
模块,Popen
有send_signal
方法。
也许http://www.doughellmann.com/PyMOTW/subprocess/#signaling-between-processes也可以帮助你。
我想你不明白我的问题。我使用0mq在进程之间传递数据,但如果还有僵尸进程,则Web服务器进程会冻结。目标是了解问题的根源,并学习如何使Pylons过程正常工作。 –
嗯,我以为你想避免僵尸进程... – rocksportrocker
最好的选择将是接他们并继续与他们沟通。避免僵尸进程的主要问题是,Web服务器进程可以在没有任何警告的情况下终止,因此没有简单的方法可以知道它是否仍在运行。 –
在Linux和Windows上都有替代方法吗? –