使用Python 3.6.1。我正在模拟使用airflow webserver
作为进程从命令中启动subprocess.Popen
。
在做了一些事情后,我后来开始杀死(或终止)它。
webserver_process = subprocess.Popen(["airflow", "webserver"])
webserver_process.kill()
我的理解是,这会向网络服务器发送SIGKILL
,其基础gunicorn
应立即关闭。
但是,当我导航到http://localhost:8080时,我发现网络服务器仍在运行。同样,当我运行sudo netstat -nlp|grep 8080
(我正在使用UNIX,airflow webserver
在端口8080上启动)时,我发现:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
只有当我使用sudo fuser -k 8080/tcp
手动终止该流程时才会终止它。
这里发生了什么?
答案 0 :(得分:1)
airflow webserver
命令返回的python进程实际调用subprocess.Popen
来启动子进程中的gunicorn
。
您可以通过调用webserver_process.pid对此进行测试,您会发现它与gunicorn主进程pid的pid不同。