Python:杀死父进程后保留子进程

时间:2020-02-18 11:00:02

标签: python python-3.x linux process subprocess

我正在开发一个简单的Flask应用程序,并且我有一个可以根据要求创建bash会话的端点。我希望即使杀死烧瓶也能保留该过程。

该过程从subprocess.Popen()开始使用,即使在终端上执行killall python之后,我也希望它继续存在。

我尝试在preexec_fn=os.setsid上设置preexec_fn=setpgrpPopen参数,但是运行killall仍然会杀死我在Flask应用程序中创建的bash shell。

相关代码:

def run_command(command):
        Process.proc = subprocess.Popen(
            command,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            universal_newlines=True,
            preexec_fn=os.setsid,
        )

run_command(['bash', '-c', 'for((i=0;i<1000;i++)); do echo $i; sleep 1; done; echo EOF'])

任何指针,我将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您可能不希望直接使用Popen,而要使用文档(17.5.1)中recommended的subprocess.run()。

# Python3.5 or above:
from subprocess import PIPE, run

def run_command(cmd:str):
    run(cmd, universal_newlines=True)

def run_piped_command(cmd:str):
    result = run(cmd, stdout=PIPE, stderr=PIPE, universal_newlines=True)
    return result.stdout, result.stderr

如果不按照@metatoaster的说明通过管道传递输出,进程将继续执行,并且如果您运行killall python命令,它将输出一条不错的python: no process found消息。

相关问题