如何终止调用python的多处理的ssh会话

时间:2019-03-26 16:43:55

标签: python bash ssh multiprocessing python-multiprocessing

我有一个程序在客户端访问的服务器上运行。客户端可以通过ssh向服务器发出命令,如下所示:

ssh user@server activate

此命令执行一个bash脚本,该脚本又执行一个Python 2.7脚本。然后,python脚本使用python的Multiprocessing.Process()类产生一个子进程。此子进程旨在在后台(例如,大于1个月)持久并运行任务,直到被另一个ssh命令告知要停止。

python脚本(test.py)的示例在单独的进程上运行一些任意开放式功能:

from time import sleep
from multiprocessing import Process


def run_child_process(callback_func):
    child = Process(target=callback_func)
    child.start()


def task():
    while True:
        # Do some arbitrary task continually.
        print("Running")
        sleep(300)


def run():
    run_child_process(task)


if __name__ == "__main__":
    run()

此脚本通过bash脚本调用,如下所示:

#!/bin/bash
python -m test.py > /dev/null

我的问题是创建子进程后ssh会话没有关闭。当原始父进程完成时,似乎新创建的子进程的存在阻止了ssh会话的关闭。

如果我改用os.fork()运行子进程,则ssh调用正确退出并使子进程运行:

def create_child_fork(callback_func):
    if os.fork() > 0:
        return
    os.setsid()
    callback_func()
    sys.exit()

我想知道为什么使用multiprocessing.Process()似乎无法做到这一点。

0 个答案:

没有答案