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

使用Python subprocess终止运行中程序的CMD终端问题

问题根源

你当前代码里记录的PID是start命令的PID,而非实际运行的cmd.exe或python.exe的PID。start是Windows Shell的内置命令,它启动cmd.exe后会立即退出,杀掉这个PID对正在运行的cmd窗口完全无效,这就是5个窗口始终留存的原因。

解决方案

直接启动cmd.exe并通过creationflags参数创建新控制台窗口,让subprocess.Popen返回cmd.exe的真实PID,后续用taskkill就能彻底终止对应窗口及其中的Python进程。

修改后的main.py代码

import time
import subprocess

cmd2 = "python test.py"
pid_lst = []
for i in range(5):
    # 直接启动cmd.exe,用CREATE_NEW_CONSOLE创建新窗口,不再依赖start命令
    b = subprocess.Popen(
        ["cmd.exe", "/k", cmd2],
        creationflags=subprocess.CREATE_NEW_CONSOLE
    )
    pid_lst.append(b.pid)
    print(f"启动进程PID: {b.pid}")
    time.sleep(1)
    
    while len(pid_lst) > 2:
        x = pid_lst.pop(0)
        # /F强制终止,/T连带终止子进程(即cmd里的python.exe)
        cmd_2 = f"taskkill /PID {x} /F /T"
        try:
            subprocess.run(cmd_2, check=True)
            print(f"已终止进程PID: {x}")
        except subprocess.CalledProcessError as e:
            print(f"终止进程{x}失败: {e}")

关键改动说明

  • 移除start /wait命令,直接调用cmd.exe,通过subprocess.CREATE_NEW_CONSOLE创建新控制台窗口,确保获取的是cmd.exe的真实PID。
  • taskkill新增/T参数,会终止目标进程及其所有子进程,避免只关闭cmd窗口但Python进程仍在后台运行。
  • 用subprocess.run()替代Popen,更方便捕获执行错误,确保命令执行状态可追踪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:20:37