Airflow网络服务器通过子进程启动而不是死亡

时间:2017-07-12 17:20:47

标签: python linux subprocess popen airflow

使用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手动终止该流程时才会终止它。

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

airflow webserver命令返回的python进程实际调用subprocess.Popen来启动子进程中的gunicorn

您可以通过调用webserver_process.pid对此进行测试,您会发现它与gunicorn主进程pid的pid不同。