feat: add scoped browser stop and job control
This commit is contained in:
+1
-1
@@ -16,7 +16,7 @@
|
||||
| --- | --- | --- | --- |
|
||||
| T-101 | 实现启动、registry、Wait 和 profile 占用检测 | T-003 | DONE |
|
||||
| T-102 | 实现 Windows 进程身份查询和外部实例保守识别 | T-101 | DONE |
|
||||
| T-103 | 实现优雅关闭、强制关闭和 Job Object 进程树 | T-102 | TODO |
|
||||
| T-103 | 实现优雅关闭、强制关闭和 Job Object 进程树 | T-102 | DONE |
|
||||
| T-104 | Chrome/Edge 双实例、异常退出和权限失败 smoke | T-103 | TODO |
|
||||
|
||||
## Phase 2:产品外壳
|
||||
|
||||
@@ -20,6 +20,8 @@ type BrowserManager interface {
|
||||
|
||||
`Stop(force=false)` 只执行优雅关闭;强制关闭必须由明确用户动作或 CLI `--force` 触发。
|
||||
|
||||
平台实现通过实例级 `StopProfile(userDataDir, force)` 执行关闭;force 只对已注册并经过身份绑定的实例生效。
|
||||
|
||||
参数数组由 `internal/platform/browser.BuildArgs` 生成;Chrome/Edge executable 由同包 `Discoverer.Resolve` 解析。二者都不接收 shell 命令行字符串。
|
||||
|
||||
## CLI 目标形状
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
|
||||
- 日期:2026-07-22
|
||||
- 阶段:文档与交互原型准备
|
||||
- 代码:已建立 Go module `chub`、`cmd/chub` 入口、logging 测试基座、浏览器 domain/application 合约、Chrome/Edge 参数/发现模块、启动 registry 和 Windows 身份/占用检查,T-001 至 T-003、T-101、T-102 已完成
|
||||
- 代码:已建立 Go module `chub`、`cmd/chub` 入口、logging 测试基座、浏览器 domain/application 合约、Chrome/Edge 参数/发现模块、启动 registry、Windows 身份/占用检查、优雅关闭和 Job Object,T-001 至 T-003、T-101 至 T-103 已完成
|
||||
- UI:尚未实现;P0 页面需要先制作 HTML 原型
|
||||
- 浏览器核心:设计参考来自 `D:\OPC\shop_helm\internal\platform\chrome`,尚未复制或接入本项目
|
||||
- blocker:无;下一个任务为 T-103
|
||||
- blocker:无;下一个任务为 T-104
|
||||
|
||||
## 当前目录
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
---
|
||||
id: T-103
|
||||
title: 实现优雅关闭、强制关闭和 Job Object 进程树
|
||||
phase: 1
|
||||
deps: [T-102]
|
||||
status: DONE
|
||||
created: 2026-07-22
|
||||
owner: codex
|
||||
---
|
||||
|
||||
## 需求与背景
|
||||
|
||||
浏览器是多进程架构,Chub 必须提供实例级关闭能力,同时避免通过进程名称影响用户的其他 Chrome/Edge。
|
||||
|
||||
## 方案与边界
|
||||
|
||||
- `Launcher.StopProfile` 只定位本 registry 中的规范化 user data dir。
|
||||
- Windows 优雅关闭向对应 PID 的窗口发送 `WM_CLOSE`。
|
||||
- Windows 启动进程加入 Job Object;强制关闭调用 `TerminateJobObject`,覆盖该实例的子进程树。
|
||||
- 非 Windows 保留显式降级:仅 force 使用进程 Kill,graceful 返回 unsupported。
|
||||
- 外部未注册进程不提供 Stop 接口。
|
||||
|
||||
## 验收要点
|
||||
|
||||
- 优雅关闭与强制关闭传递正确模式。
|
||||
- 未注册 profile 返回 `ErrInstanceNotFound`。
|
||||
- 取消 Stop 不执行关闭动作。
|
||||
- Windows Job Object 和窗口消息代码可编译,现有测试通过。
|
||||
- `go test ./...`、`go vet ./...` 通过。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 状态:DONE
|
||||
- 变更:新增实例 StopProfile、RunnerProcessController、Windows Job Object、WM_CLOSE 和非 Windows 降级实现。
|
||||
- 验证:`gofmt`、`go test ./...`、`go vet ./...` 均通过。
|
||||
- 阻塞:无。
|
||||
- 残余风险:真实 Chrome/Edge 窗口优雅关闭、子进程回收和强制关闭需 T-104 Windows smoke 验证。
|
||||
Reference in New Issue
Block a user