我正在尝试编写一个允许用户启动长时间运行的计算过程(例如几个小时)的应用程序。为此,我使用 PythonPopen()
函数。只要主 Pylons 进程正常工作,一切都很好,但是当我重新启动 Pylons 进程时,如果上次启动粘贴程序留下任何僵尸进程,它不会响应任何请求。
这个问题的根源或解决方法是什么?
在此先感谢,伊万。
我正在尝试编写一个允许用户启动长时间运行的计算过程(例如几个小时)的应用程序。为此,我使用 PythonPopen()
函数。只要主 Pylons 进程正常工作,一切都很好,但是当我重新启动 Pylons 进程时,如果上次启动粘贴程序留下任何僵尸进程,它不会响应任何请求。
这个问题的根源或解决方法是什么?
在此先感谢,伊万。
为了避免僵尸进程,子进程必须执行双叉以将自己从控制进程中分离出来。见http://en.wikipedia.org/wiki/Zombie_process
所以你需要做的就是让你的子进程再次分叉——同时小心保持相关文件句柄打开,以便你仍然可以通信。
您需要某种消息传递。这可以通过安装信号处理程序来完成。Python 有这个signal
模块并且Popen
有一个send_signal
方法。
也许http://www.doughellmann.com/PyMOTW/subprocess/#signaling-between-processes也可以帮助你。