【问题标题】:Run program in another process and receive pid in Python在另一个进程中运行程序并在 Python 中接收 pid
【发布时间】:2015-10-14 07:29:56
【问题描述】:

我想在另一个进程中运行一个程序,获取这个程序的 pid 并且子进程不应该依赖于父进程。请参阅以下 Python 代码:

cmd = 'myPythonProgramm -p param'
pid = subprocess.Popen(cmd, shell = True).pid

但是如果我杀死父进程,那么也会杀死子进程。
如果我使用,则不存在此问题:

os.system('nohup myPythonProgramm -p param &')

但在这种情况下,我无法获得子进程 pid。
如何在另一个进程中运行程序,获取该程序的 pid,并且子进程不应依赖于父进程?

【问题讨论】:

标签: python unix process subprocess


【解决方案1】:

您正在运行 Unix 进程组管理。特别是,当您在进程组附加到终端时(就像您的脚本一样)杀死进程组的会话负责人时,该组中的所有进程都会收到SIGHUP,默认情况下会导致终止。

一种解决方案是使用os.setsid() 为孩子建立一个新会话。在 Python 3 中,subprocess.Popen() 接受 start_new_session=True,它会为您执行此操作。对于 Python 2,我们可以使用preexec_fn 获得类似的解决方案:

subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2022-11-19
    • 2013-06-17
    • 1970-01-01
    • 2011-09-15
    相关资源
    最近更新 更多