gpt4 book ai didi

Python 产生子进程、分离并退出

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:35 25 4
gpt4 key购买 nike

我想知道这是否是执行系统进程并与父进程分离的正确方法,尽管允许父进程退出而不创建僵尸和/或杀死子进程。我目前正在使用 subprocess 模块并执行此操作...

os.setsid() 
os.umask(0)
p = subprocess.Popen(['nc', '-l', '8888'],
cwd=self.home,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)

os.setsid() 更改了进程组,我相信这是让进程在其父进程退出时继续运行的原因,因为它不再属于同一个进程组。

这是正确的吗?这是否是一种可靠的执行方式?

基本上,我有一个远程控制实用程序,它通过套接字进行通信并允许远程启动进程,但我必须确保如果远程控制失效,它启动的进程继续运行不受影响。

我正在阅读有关双叉的信息,但不确定这是否有必要和/或子进程。POpen close_fds 以某种方式解决了这个问题,所需要的只是更改进程组?

谢谢。

伊利亚

最佳答案

对于 Python 3.8.x,这个过程有点不同。使用自 Python 3.2 起可用的 start_new_session 参数:

import shlex
import subprocess

cmd = "<full filepath plus arguments of child process>"
cmds = shlex.split(cmd)
p = subprocess.Popen(cmds, start_new_session=True)

这将允许父进程退出,而子进程继续运行。不确定僵尸。

所有 POSIX 系统都支持 start_new_session 参数,即 Linux、MacOS 等。

在 macOS 10.15.5 上的 Python 3.8.1 上测试

关于Python 产生子进程、分离并退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579061/

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