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

在另一个进程中运行程序并在Python中接收pid,python,unix,process,subprocess,Python,Unix,Process,Subprocess,我想在另一个进程中运行一个程序,这个程序和子进程不应该依赖于父进程。请参阅以下Python代码: cmd = 'myPythonProgramm -p param' pid = subprocess.Popen(cmd, shell = True).pid 但若我杀死父进程,那个么也杀死子进程 如果我使用: os.system('nohup myPythonProgramm -p param &') 但在这种情况下,我无法获取子进程pid 如何在另一个进程中运行程序,获取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()
为孩子建立一个新会话。在Python3中,subprocess.Popen()接受一个为您执行此操作的
start\u new\u session=True
。对于Python 2,我们可以使用
preexec\u fn
获得类似的解决方案:

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

以下是如何向J.F.塞巴斯蒂安致谢!