fix(host): 跨进程启动串行化可继承管道窗口

This commit is contained in:
2026-09-09 05:51:47 +08:00
parent 57acbc0e32
commit b3b4feb2db
6 changed files with 84 additions and 9 deletions
@@ -574,3 +574,13 @@ Core 的独立数据目录目前不等于已授权 Vault。Python 旧笔记写
- 原生 MCP fixture 新增 mcp_memory(尝试预留 600 MiB)与 mcp_processes(连续启动同包受管后代)模式。原 AppContainer 和后台注册表显式测试扩展为 CPU/内存/进程三类:核对调用错误、失败会话、资源状态、Job 清空、Host 保存;后台额外核对旧 Endpoint、工具目录清理、包 ACL 基线和每次失败后同包新实例实际调用成功。内存/进程回执限定 10 秒,CPU 保留既有 20 秒观察上限且仍不作为连续 10 秒计时证明。
- 初次后台三类测试通过,CPU/内存/进程调用到错误分别约 12.339 秒、2.509 毫秒、395.929 毫秒,整项 16.34 秒;AppContainer 协议组三类也通过,整项 30.59 秒。日志 `.build/extension-resource-registry.log``.build/extension-resource-container.log`。后续以收紧后的内存/进程 10 秒测试边界重新执行最终版本,结果另记。
- 最终版本两项显式原生/后台资源集成测试同时执行通过,合计 26.42 秒,日志 `.build/extension-resource-explicit-final.log`;内存错误约 1.0–1.3 毫秒,进程数错误约 378–445 毫秒。默认扩展回归 69 通过、10 ignored,日志 `.build/extension-resource-regression.log`desktop 全目标 Clippy -D warnings 通过,日志 `.build/extension-resource-clippy.log`。本轮没有重跑全部前端、后端或远端部署测试,也未声称完整生产化完成。
## 增量:Host 进程创建期间的句柄继承窗口
- 扫描 frontend/src-tauri/src 下进程创建调用,当前自有生产路径包括 Core 的 command.group_spawn 与扩展的 CreateProcessW;其余直接创建进程位置位于测试模块。扩展此前在 ChildIo.create 即设置三个子端的继承标志,直到创建函数退出才关闭,Core 启动没有与该窗口协调。
- 新增 Windows process_creation 共享互斥。ChildIo.create 现在保留六个端点默认不可继承;进入扩展原生创建区间时,InheritedIo 先持有共享锁,再设置三个子端继承标志,继续只将这三个句柄放入 PROC_THREAD_ATTRIBUTE_HANDLE_LIST。InheritedIo 字段析构顺序保证先关闭子端,再释放锁;部分设置失败也由同一所有者清理。锁中毒导致后续启动失败,不继续开放继承。
- Core.group_spawn 的同步创建区间使用同一共享锁,锁在返回子进程后即释放,不覆盖 Core 握手、请求或整个生命周期。扩展不带 stdio 的创建仍使用 bInheritHandles=false。新所有权测试核对所有管道在区间外不可继承、区间内仅三个子端可继承、竞争启动线程须等待锁释放、释放后 Host 输出端到达 EOF。
- [CreateProcessW](https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessw) 文档说明通用继承在多线程并发创建时可能带入其他可继承句柄;[UpdateProcThreadAttribute](https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute) 仍要求 HANDLE_LIST 中的句柄具有继承标志。本轮因此同时保留显式列表并约束自有创建窗口。
- 该锁只约束已接入的自有 Host 路径,不约束绕开该入口的第三方库或系统组件。尚未完成全部依赖/平台进程创建审计,以及真实并发启动的完整跨进程句柄攻击矩阵,不能据此宣称整个 Host 继承问题已经完全验收。第三方扩展仍未启用。
- desktop 全目标测试累计 129 通过、12 ignored:库 114、Host 8、其余集成 7;覆盖原生扩展协议、后台实例、Core 生命周期/Workspace、凭据所有权及 Sync 故障恢复集成。本轮未显式重跑 ignored 长时资源/工具期限验收,辅助进程由其父测试驱动。日志 `.build/process-creation-full.log`。desktop 全目标 Clippy -D warnings 通过,日志 `.build/process-creation-clippy.log`