Claude Code / Codex 的 VSCode 插件在后台升级、或者标签页没有正常关闭时,会留下大量常驻子进程 —— 它们不会自动退出,累积几天后能吃掉数 GB 内存。这个工具用来发现并清理它们。
- 实时监控可配置的进程列表(默认
claude.exe/codex.exe):PID、插件版本、创建时间、内存、CPU 占用 - 自动识别「疑似僵尸」进程(闲置超过设定小时数且 CPU 增量低于设定阈值,均可在设置里调)
- 区分进程来源:VSCode 插件面板拉起的,还是网关/子代理服务常驻调度的(避免误杀正在工作的子代理)
- 分段筛选(全部 / 今日 / 疑似僵尸,仅 Claude / 仅 Codex)
- 多选批量终止,或单条终止
- 自动清理规则引擎:可配置按闲置时长 / 内存超限后台自动终止进程,无需人工确认(默认关闭)
- 释放Windows系统占用内存:一键清空系统待机内存列表(Standby List),仅需一次 UAC 确认,可手动触发或定时自动执行(默认关闭)——注意这只是让任务管理器数字变小,不会真正提升可用内存上限,详见下方说明
- 设置面板:监听进程名单增删、疑似僵尸阈值、轮询间隔、开机自启动、自动清理规则,全部可视化配置并持久化,无需重新构建
- 系统托盘常驻,双击打开面板,右键弹出自绘菜单(打开面板 / 一键清理僵尸 / 设置 / 退出)
- 概览卡片:总占用、进程数、vmmem(WSL2) 占用、系统内存进度条
暗色毛玻璃卡片、圆角、iOS 风格开关与按压动画,仿 iOS 视觉语言。托盘右键菜单、清理确认弹窗、通知提示均为自绘窗口,风格与主界面统一,不使用系统原生控件。
- C# / WPF,
net9.0-windows - 直接通过 WMI (
Win32_Process) 读取进程树,无需管理员权限即可读取同用户下的进程信息 - 自身运行内存占用约 60–150MB,远低于 Electron 方案
从 Releases 下载 ClaudeGuardian-vX.Y.Z-win-x64.zip,解压后运行 ClaudeGuardian.exe。
体积极致轻量(exe 约 600KB),采用 framework-dependent 发布,运行需要机器已安装 .NET 9 Desktop Runtime(多数装过 Visual Studio / 其他 .NET 应用的 Windows 机器已自带;没有的话双击运行时 Windows 会提示并引导安装)。
需要 .NET 9 SDK。
dotnet build
dotnet run --project ClaudeGuardian.csproj发布单文件可执行程序(framework-dependent,体积最小):
dotnet publish -c Release -r win-x64 --self-contained false如果想要不依赖用户机器预装 .NET 的自包含版本(体积会大到 ~170MB):
dotnet publish -c Release -r win-x64 --self-contained trueClaudeGuardian/
├── ClaudeGuardian.csproj
├── App.xaml(.cs) 应用入口
├── MainWindow.xaml(.cs) 主窗口 UI + 交互
├── SettingsWindow.xaml(.cs) 设置面板
├── ConfirmDialog.xaml(.cs) 自绘确认弹窗
├── TrayMenuWindow.xaml(.cs) 自绘托盘右键菜单
├── ToastWindow.xaml(.cs) 自绘通知提示
├── TrayIconHost.cs 系统托盘
├── Models/
│ ├── ProcessInfo.cs 进程数据模型
│ ├── AppSettings.cs 可配置项模型(进程名单/阈值/轮询间隔/自动清理规则)
│ └── RelayCommand.cs MVVM 命令绑定
├── Services/
│ ├── ProcessScanner.cs WMI 进程扫描核心
│ ├── SystemMemoryService.cs 系统内存 / vmmem 读取
│ ├── SettingsService.cs 设置读写(%AppData%\ClaudeGuardian\settings.json)
│ ├── AutoStartService.cs 开机自启动(HKCU Run 键)
│ └── StandbyListCleaner.cs 释放Windows系统占用内存(待机内存列表 + UAC 提权子进程)
├── ViewModels/
│ └── MainViewModel.cs 主视图模型,含自动清理规则引擎
├── Converters/
│ └── Converters.cs XAML 值转换器
├── Styles/
│ └── IosTheme.xaml iOS 风格主题样式
└── Assets/
└── app.ico / icon_*.png 应用图标
一个进程被标记为「疑似僵尸」需要同时满足:
- 存活时间 ≥ 设置中的「闲置超过」小时数(默认 12)
- 最近一次轮询周期内 CPU 增量 < 设置中的「CPU 增量阈值」(默认 0.05,基本无活动)
阈值在设置面板中可视化调整,也可直接编辑 %AppData%\ClaudeGuardian\settings.json。默认逻辑定义在 Models/ProcessInfo.cs 的 IsStaleCandidate。
设置面板中的「自动清理规则」默认关闭。开启后,每次轮询末尾会按以下逻辑自动终止进程(无需人工确认):
- 「要求先闲置」开启时:闲置超时,或(闲置且内存超限)→ 终止
- 「要求先闲置」关闭时:闲置超时 或 内存超限(哪怕进程当前活跃)→ 终止
内存阈值设为 0 表示不启用内存条件,仅按闲置时长判断。规则引擎实现在 ViewModels/MainViewModel.cs 的 RunAutoCleanAsync。
设置面板「释放Windows系统占用内存」用于清空 Windows 的待机内存列表(Standby List)——这是系统主动做的文件缓存,本质上是可立即回收的空闲内存,不是真正被占用、无法使用的内存。
清空它能让任务管理器/资源监视器里的"已用内存"数字立刻变小,但不会真正提升可用内存上限,因为这部分内存本来就能被新程序随时抢占。清空后的唯一实际影响是:之前缓存的文件/程序需要重新从磁盘读取,短暂地变慢一点。
如果你遇到的是真正的内存不足(程序卡顿、报错),更有效的办法是清理本工具监控的僵尸进程或关闭不需要的应用,而不是依赖这个功能。
实现方式:调用 Windows 原生 NtSetSystemInformation API(SystemMemoryListInformation + MemoryPurgeStandbyList),需要 SeProfileSingleProcessPrivilege 权限。为了不让主程序整体以管理员身份运行,每次触发会拉起一个带 UAC 提权的自身临时子进程(ClaudeGuardian.exe --clean-standby)只执行这一次清理就退出,主程序全程保持普通权限。代码见 Services/StandbyListCleaner.cs。
欢迎 PR / Issue。默认监听进程名单可直接在设置面板里增删,无需改代码重新构建。