管理命令:进程管理
process 命令用于查看 EasySwoole 运行实例中的 Worker、自定义进程和组件进程,并可以按 PID、进程组或进程名发送终止信号。
process
├── show 查看进程列表
└── kill 选择并终止进程
进程信息来自正在运行服务的 Bridge,因此执行命令时必须使用正确的 --mode。
查看进程列表
php easyswoole.php process show --mode=produce
输出按 group 分组,每个进程会显示:
| 字段 | 说明 |
|---|---|
name |
进程名称 |
pid |
操作系统进程 ID |
group |
进程组 |
memoryUsage |
当前 PHP 内存使用量 |
memoryPeakUsage |
PHP 内存峰值 |
startUpTime |
进程启动时间 |
lastHeartBeat |
框架进程表最近一次心跳时间 |
customProcess |
是否为自定义进程 |
输出示例(实际会继续列出其余 Worker):
Processes (total: 13)
EasySwoole.dev.Worker (8)
[1] EasySwoole.dev.Worker.0 PID 18851
Memory 3.45 MB processUpTime 2026-10-16 00:29:20
Peak 4 MB lastHeartBeat 2026-10-16 00:46:49 Worker process
[2] EasySwoole.dev.Worker.1 PID 18852
Memory 3.45 MB processUpTime 2026-10-16 00:29:20
Peak 4 MB lastHeartBeat 2026-10-16 00:46:49 Worker process
EasySwoole.dev.TaskWorker (4)
[9] EasySwoole.dev.TaskWorker.0 PID 18863
Memory 3.46 MB processUpTime 2026-10-16 00:29:20
Peak 4 MB lastHeartBeat 2026-10-16 00:46:49 Custom process
EasySwoole.dev.Bridge (1)
[13] EasySwoole.dev.Bridge PID 18868
Memory 3.46 MB processUpTime 2026-10-16 00:29:20
Peak 4 MB lastHeartBeat 2026-10-16 00:46:49 Custom process
持续观察
php easyswoole.php process show --mode=produce --watch=2
--watch 不带值时默认每 2 秒刷新,也可以传入大于 0 的秒数。按 q、Esc 或 Ctrl+C 退出。该模式要求交互式终端。
交互式终止进程
在终端中不传筛选条件:
php easyswoole.php process kill --mode=produce
框架会展示可选进程。支持的操作为:
↑/↓ 移动光标
空格 选择或取消当前项
a 全选或取消全选
Enter 确认选择
q/Esc 取消
选择完成后还会再次询问是否发送信号。原生方向键界面不可用时,会退化为输入编号,例如 1,3,5。在 CI、重定向或其他非交互环境中,必须显式传入筛选 Option。
确认之前,框架会重新获取进程列表并校验 PID、名称、分组和启动时间,避免用户选择期间旧进程退出、同一个 PID 被新进程复用后误杀新进程。
按 PID 终止
php easyswoole.php process kill \
--mode=produce \
--pid=12345
--pid 必须是大于 0 的整数。默认发送 SIGTERM,让目标进程有机会正常退出。
按进程组终止
先执行 process show 查看输出中的准确组名,然后调用:
php easyswoole.php process kill \
--mode=produce \
--group='MyService.produce.Worker'
--group 使用完全匹配,不是模糊查询。该命令可能命中组内多个进程,执行前必须确认目标组。
按进程名终止
php easyswoole.php process kill \
--mode=produce \
--name='MyService.produce.Worker.0'
--name 同样使用完全匹配。
可以同时传入 --pid、--group 和 --name,但当前实现使用“任一条件匹配”,不是“全部条件同时满足”。多个筛选条件会扩大目标集合,不会缩小范围:
# 会匹配 PID 12345,或者属于指定 group 的所有进程。
php easyswoole.php process kill \
--mode=produce \
--pid=12345 \
--group='MyService.produce.Worker'
自动化脚本建议只传一个明确条件,并先保存 process show 的结果。
强制终止
以下两种写法都会使用 SIGKILL:
php easyswoole.php process kill --mode=produce --pid=12345 --force
php easyswoole.php process kill --mode=produce --pid=12345 --force=true
显式关闭强制模式:
php easyswoole.php process kill --mode=produce --pid=12345 --force=false
默认的 SIGTERM 允许进程执行退出清理;SIGKILL 会立即终止进程,无法执行清理逻辑。仅在进程失去响应并确认可以承受任务中断、锁未释放和缓冲数据丢失时使用。
kill 成功时,无论使用 PID、组名还是进程名筛选,都会逐行输出实际信号和目标:
[SIGTERM] EasySwoole.dev.Worker.0 PID 18851: signal sent
按组匹配多个进程时会有多行结果。没有任何进程匹配时输出:
not any process match
使用 --force 时,前缀会变成 [SIGKILL]。PID 会在进程重建后变化,不要把示例 PID 写入脚本。
进程是否会自动恢复
- 普通 Worker 通常由 Manager 重新拉起。
- 框架托管的 Task Worker 或自定义进程是否恢复,取决于对应组件的进程管理逻辑。
- Master 进程被终止会导致整个服务退出,不要用
process kill随意操作 Master。
终止进程不是 reload 的替代方案。需要更新普通 Worker 代码时使用 server reload;只需要管理自定义 Task Worker 时使用 task reload。
源码依据
下一章:异步管理。