# Sysguard **Repository Path**: YuYao-Gith/Sysguard ## Basic Information - **Project Name**: Sysguard - **Description**: 跨平台系统监控与防休眠工具(单文件 C 实现,AGPL-3.0) - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-20 - **Last Updated**: 2026-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🛡️ SysGuard — 系统守护者 > 跨平台系统监控与防休眠工具(单文件 C 实现) [![License](https://img.shields.io/badge/License-AGPL--3.0--or--later-blue.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Linux%20%7C%20macOS%20%7C%20Windows-lightgrey.svg)]() [![Language](https://img.shields.io/badge/language-C17-555555.svg)]() [![Version](https://img.shields.io/badge/version-2.1.0-green.svg)]() SysGuard 是一个轻量级的系统守护工具,提供两个核心能力: - **📊 系统监控** —— 实时显示 CPU 使用率、内存占用、系统负载、运行时间、进程数与 GPU 状态; - **🛡️ 防休眠** —— 周期性模拟用户活动,防止系统在长时间任务(下载、渲染、演示、远程桌面)期间自动休眠或锁屏。 整个程序仅由单个 C 源文件(`sysguard.c`)构成,无第三方运行时依赖,支持 Linux / macOS / Windows 三大平台,既可前台交互运行,也可作为守护进程后台运行。 --- ## ✨ 功能特性 - **实时监控**:CPU 使用率(含可视化进度条)、内存占用、系统负载(1/5/15 分钟)、运行时间、进程数、CPU 核数 - **GPU 状态**:自动调用 `nvidia-smi` 获取显卡型号、利用率与显存占用(Linux) - **防休眠**:按可配置间隔(默认 60 秒)模拟用户活动,阻止系统休眠与屏幕关闭 - **三种运行模式**:单次输出、周期刷新、守护进程(`-D`,Unix) - **灵活的显示选择**:`-c` / `-m` / `-g` 可单独或组合显示指定监控项 - **跨平台**:Linux(X11/Wayland)、macOS、Windows 各自使用原生机制 - **安全加固构建**:`-fstack-protector-strong`、`-D_FORTIFY_SOURCE=2`、PIE、LTO、`-Wconversion` 等严格警告 - **调试支持**:`make debug` 构建 ASan/UBSan 版本 ## 🖥️ 界面预览 ```text ╔══════════════════════════════════════════════════════════════════════╗ ║ ███████╗██╗ ██╗███████╗ ██████╗ ... ║ ║ 🛡️ 系统守护者 — 监控 + 防休眠 + 跨平台 ║ ╚══════════════════════════════════════════════════════════════════════╝ 📊 系统状态 🐧 平台: Linux 🖥️ 显示: X11 ⏱️ 运行: 2d 04:12:33 🔄 进程: 218 ──────────────────────────────────────────────────────────── CPU: ████░░░░░░ 42.3% (8 核) 负载: 1.20 / 0.85 / 0.62 (1 / 5 / 15 分钟) 内存: ██████░░░░ 58% 使用 7.8 GB / 共 15.6 GB GPU: NVIDIA GeForce RTX 3060 [利用率 45%] [显存 2.1 / 12.0 GB] ──────────────────────────────────────────────────────────── 🕐 2026-08-03 19:30:00 [刷新间隔 5s] [下次防休眠 47s] 🛡️ 防休眠: 已启用 (间隔 60s) 成功: 12 💡 按 Ctrl+C 退出 ``` > 数值越界时进度条自动变为黄色(<80%)或红色(≥80%)。 ## 📦 环境要求 | 平台 | 编译器 | 额外依赖 | |------|--------|----------| | Linux | GCC 12+(或兼容 C17 的编译器)+ GNU Make | `xdg-utils`(`xdg-screensaver`)或 `xset`;GPU 监控可选 `nvidia-smi` | | macOS | Clang + GNU Make | 无(使用系统 IOKit 框架) | | Windows | MinGW-w64 + GNU Make | 无 | > 提示:`-march=native` 编译出的二进制只适用于本机。如需分发,请去掉 `Makefile` 中的 `-march=native -mtune=native` 后重新编译。 ## 🔨 构建与安装 ### Linux / macOS ```bash make # 编译 (等价于 make build) make test # 运行冒烟测试 sudo make install # 安装到 /usr/local/bin sysguard -h # 查看帮助 ``` ### Windows ```bat mingw32-make build mingw32-make install ``` ### 自定义安装目录 ```bash make install PREFIX=~/.local # 安装到 ~/.local/bin (无需 root) ``` ### Make 目标 | 目标 | 说明 | |------|------| | `make` / `make build` | 编译二进制 | | `make install` / `make uninstall` | 安装 / 卸载(需要 sudo) | | `make clean` | 清理构建产物 | | `make debug` | 构建 ASan/UBSan 调试版本(`sysguard-debug`) | | `make strip` | 极致精简(移除符号与注释段) | | `make asm` | 生成汇编代码(`sysguard.s`) | | `make run ARGS="..."` | 带参数运行 | | `make test` | 冒烟测试(帮助/版本/单次监控/防休眠/非法参数) | | `make version` | 显示版本信息 | ## 🚀 使用方法 ### 命令行选项 | 选项 | 说明 | |------|------| | `-a, --all` | 显示全部监控信息(默认) | | `-c, --cpu` | 仅显示 CPU 与负载 | | `-m, --memory` | 仅显示内存 | | `-g, --gpu` | 仅显示 GPU | | `-P, --prevent` | 启用防休眠功能 | | `-i, --interval N` | 防休眠间隔秒数(默认 60,支持 `--interval=N` 形式) | | `-r, --repeat N` | 周期刷新,间隔 N 秒 | | `-D, --daemon` | 守护进程模式(Unix) | | `-v, --verbose` | 详细输出(触发日志、退出统计) | | `-V, --version` | 显示版本信息 | | `-h, --help` | 显示帮助 | ### 示例 ```bash sysguard # 单次全量监控 sysguard -c -r 2 # 每 2 秒刷新 CPU 与负载 sysguard -P # 单次输出并触发一次防休眠 sysguard -P -i 120 # 防休眠, 每 120 秒触发一次 sysguard -c -m -P -i 60 -r 5 # CPU+内存, 每 5 秒刷新, 每 60 秒防休眠 sysguard -g # 仅查看 GPU 状态 sysguard -D -P -i 60 # 后台守护进程: 每 60 秒防休眠 ``` ## 🛡️ 防休眠机制 各平台使用原生机制阻止空闲休眠: | 平台 | 机制 | |------|------| | Linux (X11) | `xdg-screensaver reset`,失败时回退 `xset s reset` | | Linux (Wayland) | DBus `org.freedesktop.ScreenSaver.SimulateUserActivity`,失败时依次回退 | | macOS | IOKit 电源管理断言(`kIOPMAssertionTypeNoDisplaySleep`),退出时自动释放 | | Windows | `SetThreadExecutionState(ES_CONTINUOUS \| ES_SYSTEM_REQUIRED \| ES_DISPLAY_REQUIRED)`,退出时自动解除 | > 无图形会话(如纯 SSH 终端)时防休眠可能无效,这是系统机制限制,程序会如实记录失败次数。 ## ⚙️ 守护进程模式 `-D` 会将进程转为后台守护进程(Unix 标准 double-fork + `setsid`),并把刷新间隔设为 5 秒(可用 `-r` 覆盖)。 配合 systemd 开机自启示例(`/etc/systemd/system/sysguard.service`): ```ini [Unit] Description=SysGuard - system monitor and idle preventer After=multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/sysguard -D -P -i 60 Restart=always RestartSec=5 [Install] WantedBy=multi-user.target ``` ```bash sudo systemctl daemon-reload sudo systemctl enable --now sysguard ``` ## 🏗️ 项目结构 | 文件 | 说明 | |------|------| | `sysguard.c` | 全部源码(单文件,按平台条件编译) | | `Makefile` | 构建系统(跨平台,含调试/精简/测试目标) | | `LICENSE` | GNU AGPL v3 许可证全文 | | `README.md` | 本文档 | ## 🧩 设计说明 - **单文件架构**:所有功能集中于 `sysguard.c`,通过 `PLATFORM_WINDOWS` / `PLATFORM_MACOS` / `PLATFORM_LINUX` 宏条件编译平台相关代码,便于审计与分发。 - **监控数据源**:Linux 读取 `/proc` 伪文件系统(`/proc/stat`、`/proc/meminfo`、`/proc/uptime`);macOS 使用 `sysctl` 与 Mach 统计接口;Windows 使用 Win32 API。 - **防休眠与刷新解耦**:防休眠计时器独立于刷新间隔,`-r 5 -P -i 60` 可每 5 秒刷新界面、每 60 秒触发一次防休眠。 - **安全默认值**:参数严格校验(`strtol` 全量解析、范围 1–86400 秒),非法输入直接报错退出;非 TTY 输出自动禁用清屏转义序列。 ## ❓ 常见问题 **Q: 为什么防休眠没有生效?** 请确认处于图形会话中(`echo $DISPLAY` 或 `echo $WAYLAND_DISPLAY`),且安装了 `xdg-utils`(Debian/Ubuntu:`sudo apt install xdg-utils`)。纯 SSH/服务器环境没有屏幕,系统本身就不会休眠。 **Q: GPU 显示"未检测到"?** GPU 监控依赖 NVIDIA 驱动附带的 `nvidia-smi`。安装驱动后即可显示;Intel/AMD 显卡暂不支持。 **Q: 在其他机器上运行报 "Illegal instruction"?** `Makefile` 默认带 `-march=native`,二进制针对本机 CPU 优化。跨机器使用请去掉该选项重新编译。 **Q: 如何开机自启?** 参考上文 [守护进程模式](#-守护进程模式) 的 systemd 配置。 ## 📝 更新日志 - **v2.1.0 (2026-08-03)** - 修复:防休眠从未实际触发(核心逻辑缺失)导致功能完全失效 - 修复:`-V` / `--version` 未实现,`make test` 必败 - 修复:Linux 防休眠失败计数被无条件置为成功,形同虚设 - 修复:macOS 编译失败(`prctl` 为 Linux 专属 API) - 修复:守护进程模式无刷新间隔时空转烧 CPU - 修复:`-c` / `-m` / `-g` 选项无效、`--cpu` 等长选项缺失、`atoi` 无校验 - 新增:真实监控数据(CPU 使用率/内存/负载/运行时间/进程数/GPU) - 新增:防休眠触发倒计时、触发日志(`-v`)、退出清理(Windows/macOS) - 优化:`close_range()` 批量关闭文件描述符、非 TTY 禁用清屏、`-Wconversion` 等严格告警零容忍 - **v2.0.0**:跨平台重构,支持 Windows / macOS / Linux ## 🤝 贡献 欢迎提交 Issue 与 Pull Request。请保持单文件架构与零第三方依赖的原则,并确保 `make test` 通过。 ## 📄 许可证 本项目采用 **GNU Affero 通用公共许可证 v3.0 或更高版本(AGPL-3.0-or-later)** 授权。 - SPDX 标识:`AGPL-3.0-or-later`(源码与构建文件头部均已标注) - 许可证全文:[LICENSE](LICENSE)(GNU 官方文本) - 官方页面: **"或更高版本"** 意味着:你既可以按 AGPL v3.0 的条款使用、修改与分发本程序,也可以选择自由软件基金会(FSF)今后发布的任何更新版本 AGPL 条款。 **免责声明**:本程序按"现状"提供,不附带任何明示或暗示的担保(包括但不限于适销性与特定用途适用性的隐含担保)。若你修改并部署本程序提供网络服务,依据 AGPL 第 13 条,你有义务向服务使用者提供修改后的完整源代码。 版权所有 © 2024-2026 YuYao <asdf2502@126.com>