Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Claude Guardian

Claude Guardian

Windows 桌面小工具:监控并一键清理 claude.exe / codex.exe 遗留的僵尸进程


为什么需要它

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 true

项目结构

ClaudeGuardian/
├── 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.csIsStaleCandidate

自动清理规则

设置面板中的「自动清理规则」默认关闭。开启后,每次轮询末尾会按以下逻辑自动终止进程(无需人工确认):

  • 「要求先闲置」开启时:闲置超时,或(闲置且内存超限)→ 终止
  • 「要求先闲置」关闭时:闲置超时 内存超限(哪怕进程当前活跃)→ 终止

内存阈值设为 0 表示不启用内存条件,仅按闲置时长判断。规则引擎实现在 ViewModels/MainViewModel.csRunAutoCleanAsync

释放Windows系统占用内存

设置面板「释放Windows系统占用内存」用于清空 Windows 的待机内存列表(Standby List)——这是系统主动做的文件缓存,本质上是可立即回收的空闲内存,不是真正被占用、无法使用的内存。

清空它能让任务管理器/资源监视器里的"已用内存"数字立刻变小,但不会真正提升可用内存上限,因为这部分内存本来就能被新程序随时抢占。清空后的唯一实际影响是:之前缓存的文件/程序需要重新从磁盘读取,短暂地变慢一点。

如果你遇到的是真正的内存不足(程序卡顿、报错),更有效的办法是清理本工具监控的僵尸进程或关闭不需要的应用,而不是依赖这个功能。

实现方式:调用 Windows 原生 NtSetSystemInformation API(SystemMemoryListInformation + MemoryPurgeStandbyList),需要 SeProfileSingleProcessPrivilege 权限。为了不让主程序整体以管理员身份运行,每次触发会拉起一个带 UAC 提权的自身临时子进程(ClaudeGuardian.exe --clean-standby)只执行这一次清理就退出,主程序全程保持普通权限。代码见 Services/StandbyListCleaner.cs

贡献

欢迎 PR / Issue。默认监听进程名单可直接在设置面板里增删,无需改代码重新构建。

License

MIT

About

Windows 桌面工具:监控并一键清理 claude.exe / codex.exe 遗留的僵尸进程

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages