前言

作为一名开发者,你是否遇到过这样的情况:

  • 某个进程突然占用 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() 被多处调用,频繁遍历进程列表

解决方案

  1. 基于时间采样计算 CPU 使用率,非阻塞瞬时返回
  2. 引入智能缓存机制,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

使用指南

基础操作

  1. 查看进程 - 启动应用后自动加载进程列表
  2. 搜索进程 - 在顶部搜索框输入关键词
  3. 过滤进程 - 使用左侧滑块设置 CPU/内存阈值
  4. 终止进程 - 点击进程行的「终止」按钮,或勾选后批量终止

配置自动终止规则

  1. 点击左侧「+ 添加规则」按钮
  2. 填写配置:
    • 进程名称: 支持通配符,如 *chrome*node
    • CPU 阈值: CPU 使用率超过此值时触发(0 表示不限制)
    • 内存阈值: 内存使用率超过此值时触发(0 表示不限制)
    • 精确匹配: 勾选后进程名必须完全一致
  3. 打开「启用自动终止」开关
  4. 系统每 5 秒检查一次,符合条件的进程将被自动终止

规则持久化

规则自动保存在用户目录:

  • macOS: ~/.procwatch_rules.json
  • Windows: C:\Users\<用户名>\.procwatch_rules.json

技术栈

后端

  • Go - 高性能系统编程语言
  • Wails v2 - Go 语言桌面应用框架
  • gopsutil - 跨平台进程监控库

前端

  • 原生 JavaScript - 无框架,轻量高效
  • Vite - 快速前端构建工具
  • CSS3 - 现代化样式,毛玻璃效果

总结

ProcWatch 从一个简单的想法到完整产品,经历了:

想法 → 设计 → 开发 → 优化 → 跨平台 → 发布

核心价值

  • 轻量高效,不添乱
  • 智能规则,解放双手
  • 跨平台支持,一处开发,多端运行
  • 自动更新,持续迭代

如果这个项目对你有帮助,欢迎 Star ⭐ 支持!


项目地址:https://github.com/NexusToolsLab/ProcWatch

组织NexusToolsLab

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐