Python如何实现父进程退出后仍保持子进程持续存活?
问题根源
你当前使用的代码在Windows平台下失效,核心原因是子进程默认继承了父进程的标准输入、输出、错误句柄。Python脚本退出时这些句柄会被系统回收,子进程操作无效IO句柄时会直接崩溃,表现为随脚本同步终止,甚至看起来没有启动成功。
修复后可用代码
import sys import subprocess import os # 优先使用绝对路径,避免相对路径解析错误 path = os.path.abspath(r'你的child.exe完整路径') args = [path] subprocess.Popen( args, creationflags=subprocess.DETACHED_PROCESS | subprocess.CREATE_NEW_PROCESS_GROUP, # 重定向所有标准IO到空设备,切断和父进程的IO关联 stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, # 关闭所有父进程继承的非标准文件句柄 close_fds=True ) sys.exit()
可选调整说明
- 如果你需要保留子进程的控制台窗口查看输出,可以将
DETACHED_PROCESS替换为CREATE_NEW_CONSOLE,子进程会独立启动控制台窗口,同样不会随父进程退出终止 - 验证逻辑时可以先将path替换为系统自带的
notepad.exe,运行脚本后记事本正常打开不关闭,说明逻辑本身没有问题,再排查你自有child.exe的启动报错问题
内容的提问来源于stack exchange,提问作者Eby
相关产品推荐
相关产品推荐

