gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:05:28 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

您正在遇到 Unix 进程组管理。特别是,当您在进程组附加到终端(如您的脚本)时杀死进程组的 session 领导者时,该组中的所有进程都会收到 SIGHUP,默认情况下会导致终止。

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

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

关于python - 在另一个进程中运行程序并在Python中接收pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33119213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com