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

Windows系统下如何每隔500毫秒高效检测指定进程是否运行?

psutil 是否为该需求的最优方案?

是,psutil 完全符合你要求的「运行速度快、资源占用极低」的需求:

  • 它底层直接调用 Windows 原生 API 枚举进程,性能和手写 C++ 调用 Win32 API 的差距可以忽略,单次全量枚举进程的耗时通常不到 10ms,远小于 500ms 的检测间隔,不会有性能压力
  • 不需要自行处理 Windows API 调用的各类兼容性问题,开发成本极低,代码可维护性好
  • 运行时资源占用极低,休眠间隔期 CPU 占用为 0,检测阶段的 CPU 开销几乎可以忽略

完善后的定时检测代码

你原有代码存在逻辑错误:遍历每个进程时都会单独打印一次状态,会导致大量错误的「未运行」输出。修改后的代码如下,已经加入 500ms 定时检测逻辑:

import psutil
import time

# 要检测的目标进程名(不区分大小写)
TARGET_PROCESS = "excel.exe"

while True:
    process_running = False
    # 迭代进程列表,匹配到目标就提前终止遍历,降低开销
    for p in psutil.process_iter(attrs=["name"]):
        if p.info["name"] and TARGET_PROCESS == p.info["name"].lower():
            process_running = True
            break
    # 统一输出单次检测结果
    if process_running:
        print(f"Application is running: {TARGET_PROCESS}")
    else:
        print("Application is not running")
    # 等待500毫秒后执行下一次检测
    time.sleep(0.5)

可选极致优化方案

如果要进一步降低检测开销,可以增加 PID 缓存逻辑:

  • 首次匹配到目标进程后缓存它的 PID
  • 后续检测优先校验该 PID 对应的进程是否存在、且名称匹配,校验通过就不用全量枚举进程
  • 只有 PID 校验失败时才执行全量枚举,能把单次检测耗时降到 1ms 以内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:24:03