superpms/program-terminal-process

pms terminal-process program

Maintainers

Package info

github.com/superpms/program-terminal-process

pkg:composer/superpms/program-terminal-process

Statistics

Installs: 17

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.x-dev 2026-05-21 05:34 UTC

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.jsonautoload.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 command
  • pms\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-terminalsuperpms/program-redis
  • 自动监控链需要 command hook、service 注册、Redis 配置三者都可用。
  • Redis key 的 TTL 就是进程状态的存活边界;看不到 key 可能只是心跳过期。
  • 包内注册的是 terminal-process-monitor 监控命令,不是业务进程管理后台;后台读取/启动/停止属于 server 项目业务入口。