feat(windows): 使用作业对象约束扩展进程组

This commit is contained in:
2026-09-08 22:20:01 +08:00
parent 7bdc66ef75
commit a7d26cb22d
4 changed files with 326 additions and 1 deletions
@@ -312,3 +312,12 @@ Core 的独立数据目录目前不等于已授权 Vault。Python 旧笔记写
- 任一后续键发生 revision 冲突时,前面已执行的更新全部回滚;确认凭据只在整组成功后一起消耗。此变更替代此前文档中逐键确认可能部分成功的流程。
- 34 项扩展回归、2 项 Host 确认测试、3 项前端针对性测试、全目标 Clippy 和两套 TypeScript 项目检查通过。日志 `.build/extension-trust-group-tests.log`。验证后续键冲突后重开仍无部分更新,以及失败保留有效凭据、成功全部消耗。
- 真实桌面确认链路端到端、安装执行、沙箱及总体生产化验收仍未完成。
## 增量:Windows Job Object 资源容器
- 新增 extension_job,创建无可继承句柄的 Job,设置组提交内存 512 MiB、活动进程默认 16、关闭最后句柄时杀死进程;不启用 breakaway。CPU 使用 hard cap,按系统活动逻辑处理器数向下取整分配至单核等效份额;任一设置失败不返回可用容器。
- assign_suspended 明确要求调用方持有尚未恢复的 CREATE_SUSPENDED 进程,出错须终止它,全部隔离/许可检查后才能 ResumeThread。该模块只有资源约束,尚未接入第三方运行入口,也不具备文件、网络或身份隔离。
- 4 项真实 Windows 进程测试与全目标 Clippy -D warnings 通过,日志 `.build/extension-job-tests.log`。三个 ignored 条目是由父测试实际启动的辅助入口。验证进程配额为 1 时第二进程被拒绝且从未恢复、关闭 Job 后进程退出、受管理后代计数归零、显式终止,以及正常 32 MiB 分配成功/600 MiB 分配失败。
- 测试初次使用固定等待观察进程计数失败,改为最多 5 秒等待计数收敛后通过;不将单次固定延时当作清理证明。生产参数测试读取 OS 返回的内存、进程和 CPU 配置,但尚未完成长时间 CPU 压力、10 秒超限终止及 scratch 配额测试。
- API 依据 Microsoft Job Objects 与 JOBOBJECT_CPU_RATE_CONTROL_INFORMATION 文档: https://learn.microsoft.com/en-us/windows/win32/procthread/job-objects 、 https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_cpu_rate_control_information 。AppContainer、文件/网络 broker、恶意程序矩阵及实际扩展调用仍待完成,不能据此通过 C 项或开启 extensions capability。