You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过subprocess.Popen启动的进程如何在主程序退出后保持存活

问题根因

start_new_session=True是POSIX系统(Linux/macOS等)专属参数,Windows平台无对应实现,添加后不会生效。Windows下子进程默认关联父进程生命周期,父进程退出时系统会默认终止同进程组内的所有子进程。

解决方案

通过Windows专属的进程创建标志实现子进程完全独立,修改代码如下:

import subprocess
from subprocess import DETACHED_PROCESS, CREATE_NEW_PROCESS_GROUP

app_path = r'C:\Users\myusername\AppData\Local\Discord\app-1.0.9001\discord.exe'
subprocess.Popen(
    app_path,
    creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP,
    stdin=subprocess.DEVNULL,
    stdout=subprocess.DEVNULL,
    stderr=subprocess.DEVNULL
)

如果使用Python 3.7以下版本,无法直接导入上述两个常量,可以直接使用对应的十六进制数值:

subprocess.Popen(
    app_path,
    creationflags=0x00000008 | 0x00000200, # 等价于DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP
    stdin=subprocess.DEVNULL,
    stdout=subprocess.DEVNULL,
    stderr=subprocess.DEVNULL
)
参数说明
  • DETACHED_PROCESS:标识子进程不依附于父进程的控制台,父进程退出不会触发子进程的关联终止逻辑
  • CREATE_NEW_PROCESS_GROUP:为子进程单独创建独立进程组,脱离父进程的进程生命周期管理
  • 标准IO重定向到subprocess.DEVNULL:切断子进程对父进程IO句柄的继承,避免因句柄关联导致的异常退出问题

内容的提问来源于stack exchange,提问作者Kirk KD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 00:45:03