我有一个应用程序在请求处理期间创建子进程,然后有一个选项可以使用SIGTERM终止创建的进程。
问题是某些子进程根本没有收到信号。
我设法将问题提取到以下步骤:
创建文件app_sleep.py
import subprocess
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
subprocess.Popen(
['/bin/sleep', '600'],
start_new_session=True,
close_fds=True,
stdout=None,
stderr=None,
stdin=None,
)
return [b"Done"]
安装uWSGI并运行uwsgi --http :8080 --threads 2 --processes 1 --wsgi-file app_sleep.py
运行5次curl http://localhost:8080
运行ps aux | grep "/bin/sleep"
并尝试使用kill -15 <pid>
如果您使用--threads 1
,则不会发生问题 - 您可以终止所有进程。