Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SystemWatch

macOS 系统监视器,仿 Windows 任务管理器风格。

截图

SystemWatch — 性能监控

功能

  • 进程管理:按应用分组、可展开、多列排序、搜索、结束进程
  • 性能监控:CPU 总览 + 每核活跃度、内存(App / 已连接 / 已压缩细分 + 压力条)、交换
  • GPU / 功耗:GPU 活跃度、CPU/GPU/ANE 功耗、E/P 集群频率与占用、热压力等级
  • 网络监控:实时上传/下载速度、各网卡明细、TCP 连接状态分布
  • 存储监控:磁盘读写速度、IOPS、各分区使用率
  • 传感器 / 电池:电量与健康度(循环次数、容量)、系统功耗 / 热负载
  • 后台常驻:最小化到系统托盘
  • 历史持久化:SQLite 记录最近 1 小时,重启后自动恢复图表

注:温度 / 风扇转速 在 Apple Silicon 上 powermetrics 并不提供,相应面板会显示「无数据」。 这类数据需走 IOReport / SMC,列入后续计划。

系统要求

  • 操作系统:macOS(仅限本平台)。在 Apple Silicon 上开发与测试;Intel Mac 上 CPU / 内存 / 网络 / 磁盘 / 进程等基础功能可用,GPU / 功耗等依赖 powermetrics 的项目输出格式可能有差异。
  • Python:3.11+
  • 系统自带命令(无需额外安装):powermetricsvm_statioregsysctlosascript
  • Python 依赖:见 requirements.txt(PySide6 / psutil / pyobjc)

以上按代码实际用到的接口推断,未在多个 macOS 版本上做系统性测试,版本下限以实际运行为准。

安装

pip install -r requirements.txt

运行

python main.py

从源码构建(打包成 .app)

需要 PyInstaller,仓库已附打包配置 SystemWatch.spec

pip install pyinstaller
pyinstaller SystemWatch.spec

产物为 dist/SystemWatch.app,双击运行,或拖入「应用程序」。database/schema.sql 已随 .spec 一并打包,无需手动复制。

  • 首次打开被拦:当前 .app 未做代码签名,Gatekeeper 可能提示「无法打开」。右键图标选「打开」,或到 系统设置 → 隐私与安全性 点「仍要打开」。
  • 分发提醒.app 内含 PySide6(LGPLv3),对外分发时请遵守 LGPL(见「许可证」)。

GPU / 传感器数据授权(可选)

CPU、内存、网络、磁盘等数据无需任何特权。但 GPU 占用率、功耗、温度 依赖 macOS 的 powermetrics,它必须以 root 运行。

为避免每次启动弹密码框,首次进入「GPU / 功耗」或「传感器」标签页时可点击「立即授权」——它通过 macOS 原生管理员对话框写入一条 sudoers 规则:

<用户名> ALL=(ALL) NOPASSWD: /usr/bin/powermetrics
  • 范围:仅 powermetrics 一个命令免密,不影响任何其他 sudo 操作。
  • 可选:不授权则 GPU/功耗/温度不可用,其余功能照常。
  • 撤销sudo rm /etc/sudoers.d/systemwatch
  • 提醒:NOPASSWD 会扩大本地攻击面,多用户 / 高安全环境请自行权衡。后续版本计划改用非特权的 IOReport / SMC + 特权 helper,移除这条 sudoers 规则。

常见问题

  • GPU 占用 / 功耗 / 集群频率是空的,或显示「不支持」? 需要先授权 powermetrics(见上一节)。授权后采集会自动重启,无需重开 App。

  • 「温度传感器」「风扇转速」一直显示「无数据」? 平台限制,不是 bug。Apple Silicon 的 powermetrics 不提供 SMC 温度 / 风扇读数,这类数据需走 IOReport / SMC,已列入后续计划。

  • 看不到电池电量 / 健康度? 台式机(Mac mini / Studio / Pro / iMac)没有电池,相应面板显示「未检测到电池」属正常。

  • 右键结束进程失败、提示没有权限? 系统进程或其他用户的进程需要更高权限;普通用户只能结束自己的进程。

  • 关掉窗口后 App 没退出? 设计如此:关闭窗口会最小化到菜单栏托盘。要彻底退出,点托盘图标 →「退出」。

  • 历史图表数据存在哪?怎么清空? SQLite 库位于 ~/.systemwatch/history.db,仅保留最近约 1 小时。删除该文件即清空历史(下次启动会自动重建)。

  • 怎么撤销 powermetrics 授权? sudo rm /etc/sudoers.d/systemwatch

技术栈

  • Python 3.11+
  • PySide6(Qt for Python,LGPLv3)
  • psutil
  • SQLite

许可证

本项目以 MIT 许可证 开源。

GUI 基于 PySide6(LGPLv3)。以二进制形式分发时请遵守 LGPL 要求:附带其许可证文本、保留动态库可被替换。

About

macOS 系统监视器(仿 Windows 任务管理器风格)

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages