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

我想在另一个进程中运行一个程序,得到这个程序的subprocess,subprocess不应该依赖父进程。 请参阅以下Python代码:

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

但是如果我杀了父进程,那么也杀subprocess。
这个问题是不存在的,如果我使用:

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

但在这种情况下,我不能得到subprocessPID。
我怎样才能在另一个进程中运行一个程序,得到这个程序和subprocess不应该从父母依赖?

您正在运行Unix进程组管理。 特别是,如果在连接到终端时终止进程组的会话负责人(如同您的脚本),那么该组中的所有进程都会收到一个SIGHUP ,默认情况下会导致终止。

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

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