【问题标题】:Airflow webserver launched via subprocess not dying on kill通过子进程启动的气流网络服务器不会死于杀死
【发布时间】:2017-07-12 17:20:46
【问题描述】:

使用 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 手动终止进程时,它才会最终死掉。

这是怎么回事?

【问题讨论】:

    标签: python linux subprocess popen airflow


    【解决方案1】:

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

    您可以通过调用 webserver_process.pid 进行测试,您会注意到它与 gunicorn 主进程 pid 不同。

    【讨论】:

    • 天哪,乌龟一路下来。我知道我可以通过 PID 关闭,但我希望有一种方法可以内联,而不需要 sudo 或弄乱文件权限。你知道我是否可以在内部 API 中使用任何方法来初始化关机?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    相关资源
    最近更新 更多