前言
作为一名开发者,你是否遇到过这样的情况:
- 某个进程突然占用 100% CPU,风扇狂转
- 内存泄漏导致系统卡顿,却找不到罪魁祸首
- 想要自动化管理某些"调皮"的进程,却苦于没有趁手的工具
市面上的任务管理器要么功能简陋,要么界面古板。作为一个追求效率的开发者,我决定自己造一个轮子 —— ProcWatch。
项目简介
ProcWatch 是一款使用 Go + Wails 构建的跨平台进程监控应用,提供直观的图形界面来查看、管理和自动终止系统进程。
核心特性
- 🎨 现代化 UI - 毛玻璃效果,深色主题,赏心悦目
- ⚡ 高性能 - Go 语言加持,资源占用极低(<1% CPU)
- 🖥️ 跨平台 - 原生支持 macOS(Intel/Apple Silicon)和 Windows
- 🔄 实时监控 - 精确的 CPU 采样算法,5 秒自动刷新
- 🎯 智能规则 - 支持通配符匹配,灵活配置自动终止策略
- 🔄 自动更新 - 集成 GitHub Releases,一键检查更新
功能展示
实时进程监控
显示进程 PID、名称、CPU、内存、状态、用户等信息,支持按 CPU、内存、PID、名称排序,分页显示。
智能过滤与搜索
- CPU/内存阈值过滤
- 关键词搜索(进程名、PID、用户)
- 隐藏系统进程选项
自动终止规则
支持通配符 * 匹配进程名:
| 进程名称 | CPU 阈值 | 内存阈值 | 精确匹配 | 说明 |
|---|---|---|---|---|
*chrome* | 80% | 0% | 否 | 匹配所有 Chrome 相关进程 |
node | 90% | 50% | 是 | 仅匹配名为 node 的进程 |
*helper* | 0% | 0% | 否 | 匹配即终止 |
技术选型
为什么选择 Go + Wails?
| 方案 | 优点 | 缺点 |
|---|---|---|
| Electron | 生态丰富 | 内存占用大,包体积大(100MB+) |
| Qt | 原生性能 | 学习曲线陡峭,C++ 开发效率低 |
| Flutter | 跨平台一致 | 桌面端支持不够成熟 |
| Wails | 轻量、原生、Go 后端 | 社区相对较小 |
Wails 的优势:
- 打包后仅 10MB 左右
- 使用系统原生 WebView,无需打包 Chromium
- Go 后端性能优异,调用系统 API 方便
开发过程中的挑战
性能优化:从 63% 到 <1%
开发初期,ProcWatch 自身的 CPU 占用竟然高达 63%!经过排查发现:
问题原因:
- CPU 使用率计算方法不当,每次调用阻塞 1 秒
GetProcesses()被多处调用,频繁遍历进程列表
解决方案:
- 基于时间采样计算 CPU 使用率,非阻塞瞬时返回
- 引入智能缓存机制,1 秒内重复请求直接返回缓存
type App struct {
cachedProcesses []ProcessInfo
cacheMutex sync.RWMutex
lastCacheTime time.Time
}
优化效果:
| 指标 | 优化前 | 优化后 |
|---|---|---|
| CPU 占用 | 63% | <1% |
| 内存占用 | 45MB | 25MB |
| 刷新延迟 | 2-3s | <100ms |
跨平台适配的血泪史
图标格式:macOS 需要 ICNS,Windows 需要 ICO,PNG 不能直接用。
进程用户名格式:Windows 是 DOMAIN\Username,macOS 是 /Users/username,需要统一处理。
进程状态判断:不同系统返回的状态码含义不同,需要降级处理。
自动更新实现
通过 ldflags 在构建时注入版本信息:
LDFLAGS="-X main.AppVersion=${VERSION} -X main.BuildTime=${BUILD_TIME}"
wails build -ldflags "${LDFLAGS}"
调用 GitHub API 检查更新,有新版本时一键跳转下载页面。
项目结构
ProcWatch/
├── app.go # Go 后端核心逻辑
├── main.go # 应用入口
├── wails.json # Wails 配置
├── build.sh # 构建脚本
├── frontend/
│ ├── src/
│ │ ├── main.js # 前端逻辑(原生 JS)
│ │ └── style.css # 样式文件
│ └── index.html
└── build/
└── bin/ # 构建产物
快速开始
安装
前往 GitHub Releases 下载对应平台的安装包:
- macOS:
ProcWatch-x.x.x-darwin-arm64.dmg(Apple Silicon)或ProcWatch-x.x.x-darwin-amd64.dmg(Intel) - Windows:
ProcWatch-x.x.x-windows-amd64.zip
从源码构建
# 克隆项目
git clone https://github.com/NexusToolsLab/ProcWatch.git
cd ProcWatch
# 安装依赖
cd frontend && npm install && cd ..
# 开发模式
wails dev
# 构建生产版本
./build.sh 1.1.0
使用指南
基础操作
- 查看进程 - 启动应用后自动加载进程列表
- 搜索进程 - 在顶部搜索框输入关键词
- 过滤进程 - 使用左侧滑块设置 CPU/内存阈值
- 终止进程 - 点击进程行的「终止」按钮,或勾选后批量终止
配置自动终止规则
- 点击左侧「+ 添加规则」按钮
- 填写配置:
- 进程名称: 支持通配符,如
*chrome*、node - CPU 阈值: CPU 使用率超过此值时触发(0 表示不限制)
- 内存阈值: 内存使用率超过此值时触发(0 表示不限制)
- 精确匹配: 勾选后进程名必须完全一致
- 进程名称: 支持通配符,如
- 打开「启用自动终止」开关
- 系统每 5 秒检查一次,符合条件的进程将被自动终止
规则持久化
规则自动保存在用户目录:
- macOS:
~/.procwatch_rules.json - Windows:
C:\Users\<用户名>\.procwatch_rules.json
技术栈
后端
前端
- 原生 JavaScript - 无框架,轻量高效
- Vite - 快速前端构建工具
- CSS3 - 现代化样式,毛玻璃效果
总结
ProcWatch 从一个简单的想法到完整产品,经历了:
想法 → 设计 → 开发 → 优化 → 跨平台 → 发布
核心价值:
- 轻量高效,不添乱
- 智能规则,解放双手
- 跨平台支持,一处开发,多端运行
- 自动更新,持续迭代
如果这个项目对你有帮助,欢迎 Star ⭐ 支持!