【问题标题】:Does supervisord managed subprocess?supervisord 是否管理子进程?
【发布时间】:2019-12-07 14:12:39
【问题描述】:

我正在使用 supervisord 来管理流程。

(避免僵尸进程,以及其他难以管理的进程)

假设我将运行使用多处理的 python 脚本。

from multiprocessing import Process
import time

def fetch():
    while True:
        time.sleep(1)
        print("I'm still alive...")


def main():
    processes = [
        Process(target=fetch),
        Process(target=fetch),
        Process(target=fetch),
        Process(target=fetch),
        Process(target=fetch),
        Process(target=fetch),
        Process(target=fetch),
        Process(target=fetch),
        [And more process here...]
    ]
    for process in processes:
        process.start()

main()

上面的代码,fetch()创建许多处理并运行它。

在这种情况下,如果fetch()创建的进程成为僵尸进程,

supervisord 管理它?(例如自动终止和重启)

或者,只管理根进程?

谢谢。

【问题讨论】:

    标签: python supervisord


    【解决方案1】:

    Supervisord 管理子进程,该子进程负责管理它产生的任何东西。但是,如果要确保所有子进程都与主进程一起停止,请在supervisord.conf 文件中使用stopasgroup=true

    查看相关问题:supervisord stopping child processes

    【讨论】:

    • 我尝试了stopasgroup=truekillasgroup=true,但它不起作用。假设父进程 id=1,子进程 id=2, 3。在这种情况下,如果我杀死进程 id=1,process_id=2,3 不会被杀死,而是启动新进程。
    • 如果以上是您的代码的范围,则最终成为僵尸的进程来自多处理处理而不是主管。查看相关问题:stackoverflow.com/questions/18477320/…stackoverflow.com/questions/30506489/…
    • 你是对的。子进程必须由python代码处理。
    猜你喜欢
    • 1970-01-01
    • 2021-09-22
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    相关资源
    最近更新 更多