superpms / program-terminal-process
pms terminal-process program
Package info
github.com/superpms/program-terminal-process
pkg:composer/superpms/program-terminal-process
Requires
- php: >=8.1
- superpms/interpreter-terminal: ^1.0.0
- superpms/program-redis: ^1.0.0
This package is auto-updated.
Last update: 2026-05-21 05:34:20 UTC
README
program-terminal-process 是 PMS terminal 命令的进程监控 program 包。它通过注解识别需要监控的 CLI 命令,旁路启动 terminal-process-monitor 命令,对目标 pid 做存活检测,并把服务/进程状态按固定键空间写入 Redis。
安装与挂载
composer require superpms/program-terminal-process
包通过 composer.json 的 autoload.files 自动执行 bin/autoload.php,将 pms\program\terminalProcess\command\TerminalCommandProcessMonitorCommand 注册到 TerminalCommandHook。
要让业务命令启动时自动拉起监控进程,项目侧还需要在 service 配置中启用:
\pms\service\TerminalCommandProcessMonitorService::class,
当前 server 项目在 server/core/config/service.php 中已经注册该 service。
快速使用
给 terminal command 类增加注解:
use pms\annotate\TerminalCommandProcessMonitor; use pms\app\TerminalCommandApp; #[TerminalCommandProcessMonitor('my-service', 30)] class MyWorkerCommand extends TerminalCommandApp { public function entry(): void { while (true) { // work sleep(5); } } }
命令启动并进入 terminal sandbox 后,service 会拉起:
php pms terminal-process-monitor <pid> <taskUUID> <keepAliveInterval>
监控命令会持续写 Redis 心跳,直到目标 pid 不存在。
主要模块
pms\annotate\TerminalCommandProcessMonitor: 标记需要旁路监控的 terminal commandpms\service\TerminalCommandProcessMonitorService: 在 terminal 生命周期中识别注解并拉起监控进程pms\program\terminalProcess\command\TerminalCommandProcessMonitorCommand: 实际执行 pid 存活检测和心跳续写的命令pms\program\terminalProcess\TerminalProcessRedisModule: Redis 存储实现的进程状态模块pms\program\terminalProcess\TerminalProcessRedisDriver: Redis 键空间、读取、写入和聚合入口pms\app\TerminalCommandProcessRedisApp: 给监控命令使用的 Redis 进程模块 app 基类
Docs 导航
注意事项
- 本包依赖
superpms/interpreter-terminal和superpms/program-redis。 - 自动监控链需要 command hook、service 注册、Redis 配置三者都可用。
- Redis key 的 TTL 就是进程状态的存活边界;看不到 key 可能只是心跳过期。
- 包内注册的是
terminal-process-monitor监控命令,不是业务进程管理后台;后台读取/启动/停止属于 server 项目业务入口。