Files
wuguanganandClaude Opus 5 5ce8c9893e fix: 重启后开项目弹系统终端;终端关了会话还显示在线
两个都是「看起来对、其实一直错」的判断。

## 1. iTerm 检测

iTerm2 的包叫 iTerm.app,只有可执行文件叫 iTerm2。旧的 isInstalled 拿
AppleScript 名拼 /Applications/iTerm2.app,永远不存在,detectTerminal()
一路降级到 macOS 终端。

平时看不出来:hub session 通常已存在且有客户端连着,走 addWindow 根本
不碰终端检测。只有开机后第一次建 session 才暴露 —— 所以现象是"重启后",
其实和重启无关。

改成 bundle id 走 LaunchServices,路径只做兜底且两个候选包名都试。

顺带修 pgrep:macOS 的 pgrep 默认排除自己的祖先进程(要 -a),所以
从 iTerm 里跑的 hubctl/hubprobe 问"iTerm 在跑吗"恒为否。改用
NSRunningApplication(也不会像 AppleScript 那样触发冷启动)。

## 2. detached 会话

关掉终端不结束会话 —— claude 的父进程是 tmux server,关窗口只是 detach。
kill(pid, 0) 依然为真,项目行一直亮着蓝点写"1 个会话"。

不是把它报成已退出(那会掩盖一个还在烧 token 的进程),而是把两半都说:
还在跑,但终端已经关了。空心点 + "1 个会话 · 终端已关",
会话详情卡的位置标注也加上"(终端已关,仍在后台跑)"。

边界:按 tmux 会话名判而不是"有没有任何客户端";绑不到 pane 的不算
detached —— 那是根本不在 tmux 里,判断不了的事不能当结论下。

14 个新测试,482 个全过。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 13:47:06 +08:00
..