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

如何在Windows系统上用Python快速终止所有正在运行的进程

Windows环境下Python快速批量终止进程的实现方案

首先说明原方案的问题:Windows平台的os.kill实现逻辑与Linux不同,默认发送的信号无法穿透explorer等带自我保护机制的进程的防护,必须使用强制终止逻辑才能生效。

方案1:异步调用taskkill

针对单任务调用taskkill过慢的问题,可以使用concurrent.futures.ThreadPoolExecutor实现多线程异步调用,子进程调用属于IO密集型操作,多线程可以大幅降低总耗时:

import subprocess
from concurrent.futures import ThreadPoolExecutor

# 原有获取PID的函数,增加异常兼容
def processes():
    subp = subprocess.Popen(["tasklist", "/FO", "CSV", "/NH"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
    processes_from_command = subp.stdout.read().decode("ISO-8859-1")
    subp.terminate()
    for row in processes_from_command.split("\n"):
        row = row.strip()
        if not row:
            continue
        try:
            yield int(row.split(",")[1].replace("\"", ""))
        except (IndexError, ValueError):
            continue

# 单个PID终止函数
def kill_single_pid(pid):
    # /F参数表示强制终止,可解决无法杀掉explorer的问题
    subprocess.run(
        ["taskkill", "/F", "/PID", str(pid)],
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL
    )

if __name__ == "__main__":
    pid_list = list(processes())
    # 线程数可根据实际运行效果调整
    with ThreadPoolExecutor(max_workers=20) as executor:
        executor.map(kill_single_pid, pid_list)

方案2:批量taskkill(优先推荐)

taskkill本身支持一次性传入多个PID参数,仅需调用1次子进程即可完成所有进程终止,无多线程额外开销,实现最简单速度最快:

if __name__ == "__main__":
    pid_list = list(processes())
    # 构造批量终止命令
    cmd = ["taskkill", "/F"]
    for pid in pid_list:
        cmd.extend(["/PID", str(pid)])
    subprocess.run(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)

方案3:调用原生Win32 API(最高性能)

如果不想依赖外部命令,可以通过ctypes直接调用Windows系统API终止进程,没有子进程创建开销,性能最高:

import ctypes
import ctypes.wintypes

kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
PROCESS_TERMINATE = 0x0001

def kill_pid_by_api(pid):
    h_process = kernel32.OpenProcess(PROCESS_TERMINATE, False, pid)
    if not h_process:
        return
    kernel32.TerminateProcess(h_process, 0)
    kernel32.CloseHandle(h_process)

if __name__ == "__main__":
    for pid in processes():
        try:
            kill_pid_by_api(pid)
        except Exception:
            pass

注意事项

  • 终止系统核心进程会导致系统崩溃、自动重启,执行前建议先过滤掉svchost.exe、lsass.exe等系统关键进程的PID
  • 强制终止进程不会给进程留出数据保存的时间,可能导致未保存的数据丢失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:48:03