在带有用于 python 3 的 mod_wsgi 的 Ubuntu 12.04 上。
我有一个 WSGI 应用程序(实际上只是一个脚本),它碰巧为每个用户会话启动了一个带有 Popen 的外部程序(它实际上是一个小型 GTK 程序,我正在试验它的 HTML5 后端)。
客户端有一个 Javascript 循环,它每隔几秒向 WSGI 发送一个“保持活动”信号。如果 WSGI 有一段时间没有收到任何会话信号,那么它将杀死相关进程(并删除会话)。
这很好用,除非我重新启动/重新加载 Apache 或编辑 WSGI 脚本(AFAIK 会自动重新加载应用程序)。如果我这样做,子进程不会被杀死。它们仍在运行(它们不是僵尸),我所能做的就是手动杀死它们(WSGI 丢失了以前的会话,因此它不会杀死任何“旧”进程)。
所以我想要以下之一:
- 一种注意到服务器正在从 WSGI 端停止/重新启动/重新加载的方法,以便它可以在知道它们的同时清理它的子进程
- 生成的进程应该与 mod_wsgi 一起死亡(目前似乎子进程在 mod_wsgi 被杀死/重新加载时重新附加到 Init)
这是我使用的虚拟主机:
<VirtualHost *:80>
WSGIDaemonProcess deckard_qh user=deckard group=deckard threads=5
WSGIScriptAlias / /home/deckard/wsgi/deckard_qh.wsgi
Alias /ressources /home/deckard/ressources
<Directory /home/deckard/wsgi>
WSGIProcessGroup deckard_qh
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<Directory /home/deckard/ressources>
Order deny,allow
Allow from all
</Directory>
我尝试添加WSGIProcessGroup deckard
and WSGIApplicationGroup %{GLOBAL}
(根据这个答案),但它没有改变任何东西。我还在os.setsid()
我的 WSGI 脚本的开头添加了,但没有结果。