Skip to content

Windows 上 brainstorm 视觉伴侣 server 变孤儿进程(owner 看门狗失效 + stop-server.sh 杀不掉) #92

Description

@qicesun

问题

在 Windows(Git bash / MSYS2)上,brainstorm 视觉伴侣的 server.cjs 在启动它的会话结束后不会退出,会作为孤儿进程一直运行到 4 小时 idle 超时。实测发现两个 server 进程在其会话结束后仍运行约 3 小时。

根因(代码定位)

  1. skills/brainstorming/scripts/start-server.sh(约 165–166 行)在检测到 Windows/MSYS2 时清空 OWNER_PID="",并作为 BRAINSTORM_OWNER_PID 传入。
  2. skills/brainstorming/scripts/server.cjs:空值 → ownerPid = null(约 113 行);ownerAlive() 在无 owner 时恒返回 true(约 634–636 行)。因此 owner-death 看门狗(本应在启动它的会话退出时关闭 server)永不触发,只剩 4h idle 兜底(默认 IDLE_TIMEOUT_MS,约 553–557 行)。
  3. state/server.pid 写入的是 MSYS PID 而非 Windows PID,导致 stop-server.sh 在 Windows 上按该 PID 去 kill 会落空 → 即便显式清理也停不掉。

实测证据

  • detached 启动后杀掉启动它的 pwsh,node server 仍存活、继续监听
  • 跑真实 start-server.sh --foregroundserver.pid = 204(MSYS PID),实际监听者是 Windows PID 80288;按 server.pid 停止无效,需按实际监听 PID Stop-Process

可能的修复方向

  • 传入 Windows 可见的 owner PID(Node process.kill(pid,0) 能校验),而非在 Windows 上一律清空;和/或
  • 心跳 / lockfile 机制,会话退出即自关;和/或
  • Windows 上采用更短的默认 idle 超时(分钟级)作为兜底;和/或
  • stop-server.sh 在 Windows 上按实际监听 PID(而非 MSYS server.pid)停止。

环境

GitHub Copilot CLI 1.0.69-1 / Windows / Node v24.17.0 / Git bash。

说明:此 issue 与「视觉伴侣补充 Copilot CLI 启动说明」的文档 PR 是独立问题,特意不捆绑。文档 PR 解决"卡在 working"的症状;本 issue 是 Windows 下 server 生命周期的代码 bug。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions