### 现象 Linux 上向 DevHub 主进程发送 SIGTERM(`kill <pid>`)后,10 秒内仍不退出,只能 `kill -9`。1.3.0 与 1.4.0 的 AppImage 都能复现(Linux Mint 22.2,X11)。 ### 影响 注销、关机、`systemctl --user stop` 等都会先发 SIGTERM:关机被拖慢;最终被强制结束(SIGKILL)时,`before-quit` 中停止进程树的逻辑(`core.dispose()`)不会执行,正在运行的脚本可能成为孤儿进程。 ### 复现 1. 启动 DevHub(AppImage),不运行任何脚本 2. `kill -TERM <主进程 pid>` 3. 进程仍在运行 ### 初步判断 `apps/desktop/src/main/index.ts` 没有处理 SIGTERM / SIGINT;退出依赖 `before-quit`。可能需要 `process.on('SIGTERM', () => app.quit())`,并确认与「关闭时最小化到托盘」的窗口 close 处理不冲突。修复需同时写 Linux 测试(AGENTS.md:进程管理两个平台都要测)。 ### 发现于 #8(Linux AppImage 自动更新验证)
Activity
Delta1035 commentedon Oct 7, 2026
修复见 #45。
根因:没有运行中的脚本时,
before-quit里的app.quit()在 Electron 处理 SIGTERM 的Quit()内部重入(dispose()在回调返回时的微任务中就完成了),外层用「被阻止」的结果覆盖了is_quitting_;窗口关闭后 Electron 只发window-all-closed,托盘模式下进程挂住。修复:把app.quit()推迟到下一轮事件循环。验证
before-quit×2 →window-all-closed、没有will-quit;修复后before-quit → will-quit → quit,约 1 秒退出。quit.spec.ts新增 SIGTERM 用例(空闲退出、停止进程树;Windows 跳过):Linux 上全部通过,去掉修复后空闲用例超时失败。pnpm check通过;pnpm e2e中一个无关的悬停卡片用例偶发失败,单独重跑通过。fix(desktop): quit on SIGTERM when no scripts are running (#45)