在uWSGI请求上下文中创建的子进程不会收到SIGTERM

时间:2018-06-15 09:49:05

标签: python subprocess python-3.5 uwsgi

我有一个应用程序在请求处理期间创建子进程,然后有一个选项可以使用SIGTERM终止创建的进程。

问题是某些子进程根本没有收到信号。

我设法将问题提取到以下步骤:

  1. 创建文件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"]
    
  2. 安装uWSGI并运行uwsgi --http :8080 --threads 2 --processes 1 --wsgi-file app_sleep.py

  3. 运行5次curl http://localhost:8080

  4. 运行ps aux | grep "/bin/sleep"并尝试使用kill -15 <pid>

  5. 向每个人发送SIGTERM

    如果您使用--threads 1,则不会发生问题 - 您可以终止所有进程。

0 个答案:

没有答案