作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在另一个进程中运行一个程序,获取该程序的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/
我是一名优秀的程序员,十分优秀!