运行 在另一个进程中编程并在 Python 中接收 pid

Run program in another process and receive pid in Python

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

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

但是如果我杀死父进程然后也杀死子进程。
如果我使用:

,则不存在此问题
os.system('nohup myPythonProgramm -p param &')

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

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

一种解决方案是使用 os.setsid() 为 child 建立一个新会话。 In Python 3 subprocess.Popen() 接受一个 start_new_session=True 为你做这件事。对于 Python 2,我们可以使用 preexec_fn:

得到类似的解决方案
subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid)