Zig实现Windows下进程监控

本文介绍了 Zig 如何实现一个Windows 下进程感知与控制工具(ProcMonitor):核心是在检测到指定进程启动时,自动触发预定义动作(如关闭/启动其他进程)。

整体架构

按照分层基本做的整体划分

  • CLI → 配置 → 初始化 → 监控器
  • 监控器 → 拉取进程列表 → 状态机判断
  • 状态机 → 触发动作引擎
  • 动作引擎 → 调用 Windows API
层级 职责
入口层 CLI解析、初始化系统组件
核心逻辑层 监控调度、状态判断、动作执行
基础设施层 配置、日志、路径处理
系统接口层 封装 Windows API

架构图

核心流程

各阶段流程:

  • 启动阶段

    • CLI解析(配置路径、daemon、once)
    • Fail-Fast:参数错误直接退出
  • 初始化阶段

    • 加载 TOML 配置
    • 初始化日志(文件 + 控制台)
    • 可选 daemon 化(隐藏窗口 + 解绑 console)
  • 核心循环,每轮:

    • 获取系统进程快照
    • 遍历所有监控目标
    • 匹配进程
    • 根据状态判断是否触发动作

流程图

核心实现

配置使用TOML:

  • 一条规则 = 一个被监控进程 + 一组动作
  • 动作用 Map 表达:支持多目标、多动作
  • 每个规则独立配置检查间隔(如游戏进程可以较长,工具类较短)
  • 每条规则独立循环,互不干扰
ini 复制代码
[[monitor.process]]
monitored = "steam.exe"
action = { "clash-verge.exe" = "close" }
check_interval = 10

启动逻辑

启动时错误处理

场景 处理
配置解析失败 直接退出
API调用失败 返回错误并记录日志
无效路径 拒绝执行
scss 复制代码
parse_args()
load_config()
init_logger()

if daemon:
    daemonize()

monitor.init()

if once:
    run_once()
else:
    start_loop()

核心处理模块

状态驱动检测

scss 复制代码
(process_name, pid) → 状态表 → 是否触发

关键数据结构

java 复制代码
MonitorState:
    monitored_process
    detected_pids (HashMap)
    check_interval

核心逻辑

css 复制代码
for process in process_list:
    if match(target):
        if pid not in detected:
            execute_actions()
        mark_detected(pid)

行为/动作执行机制

动作类型

类型 行为
close 终止目标进程
start 启动新进程

执行流程

go 复制代码
for action in actions:
    if type == close:
        terminateProcess()
    else if type == start:
        CreateProcessW()

状态管理 / 控制机制

状态设计策略

问题 解决方式
重复触发 记录 PID
多实例 HashMap
状态漂移 每轮校准

状态图

构建与验证

构建运行

r 复制代码
# 构建
zig build

# 单次执行
zig build run -- --once

# 指定配置
zig build run -- -c config.toml

# 后台运行
zig build run -- --daemon

示例配置

ini 复制代码
daemon = false

[[monitor.process]]
monitored = "game.exe"
action = { "helper.exe" = "start" }
check_interval = 5

项目地址:github.com/alwaysrun/p...

相关推荐
程序猿DD25 分钟前
OctaFuse Gateway 2.3.0:供应商粘性绑定,让缓存命中更稳定
后端
乐橙开放平台1 小时前
老旧小区监控事件驱动派单:基于 setMessageCallback 的 msgType 分级与工单闭环实现
后端·物联网·音视频
猿长大人2 小时前
C# | MediatR 入门指南:后端架构解耦
分布式·后端·架构·c#·.net
人间凡尔赛2 小时前
Kubernetes十周年:从Cloud Native到AI Native的架构范式跃迁
后端·云原生·架构
John jj2 小时前
拆解 Telegram 群组频道收录市场:三类方案,一个可运行的评分模型,目前TG中文人工评分加模型评分机制——LetsTG收录“快速”、“无门槛”
大数据·后端·python·深度学习·搜索引擎·django·全文检索
Boop_wu2 小时前
SpringBoot 集成阿里云短信认证服务(个人)
spring boot·后端·阿里云
Gopher_HBo2 小时前
Engine 核心(gin.go)
后端
用户125758524363 小时前
为什么队列长度归零,不代表后台异步任务真的跑完了
redis·后端·go
晚安code3 小时前
Java编程规范避坑指南:阿里开发手册15条强制规约实战解析
java·后端
小蒜学长3 小时前
“守望自然”招募志愿者环保行动网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端