MUNDERDIFFLIN / LEARN
CHAPTER 05
第 05 课 · 进程与权限14 分钟阅读深入

应用不是“打开窗口”就启动完了:服务装配决定运行边界

从 app.whenReady 追到 Hive、窗口、托盘与退出清理,理解全局 manager 的创建顺序为什么是一条隐含依赖图。

本课核心问题启动顺序为什么是架构,而不只是样板代码?
学完你能
  • 画出启动与退出的对称链。
  • 识别全局 manager 的依赖和部分失败策略。
01
装配入口

app.whenReady 是组合根,不是业务函数

这里创建或连接全局服务,再把它们注入窗口、IPC 和事件处理器。读启动链时要记录顺序依赖,而不是只列函数名。

像搭建舞台:先通电和装后台,再开前台窗口;先后顺序错了,按钮存在但背后的能力还没准备好。

02
隐含依赖图

全局变量让访问简单,也让初始化约束变隐形

PtyManager、HiveManager、HookServer、ClosingTimeController 等拥有不同资源。真正要审计的是谁创建、谁引用、谁监听谁,以及失败后剩下什么。

  • 01构造依赖:A 没有 B 就不能创建。
  • 02事件依赖:A 在运行中订阅 B。
  • 03清理依赖:A 必须在 B 之前停止,避免回调落到已销毁资源。
  • 04降级依赖:可选模块失败不应拖垮核心启动。
03
退出链

teardownAndQuit 是启动链的反向证明

可靠退出需要先阻止新工作,再停调度和网络入口,随后回收 PTY/进程、落盘状态,最后让 Electron 退出。只调用 app.quit 不等于完成生命周期。

关机场不能只关大厅灯:必须停止放行、让飞机落地、保存记录,最后才断电。

LESSON CHECKPOINT

能用自己的话回答核心问题了吗?

启动创建所有权;退出验证所有权。