起因
在使用 Claude Code 过程中,我发现 resume 列表中出现了 4 个奇怪的对话记录,每个对话的首条消息都是 C:/Program Files/Git/help,但我从未主动输入过这个内容。
这 4 个"幽灵会话"出现在同一天的 2 小时内:
| Session ID | 时间 | 文件大小 |
|---|---|---|
12bd3669-... | 07:01:28 | 6.6KB |
8a3ec0bf-... | 07:39:03 | 189KB |
79a0f413-... | 08:54:41 | 4.6KB |
228b9365-... | 08:57:25 | 12.9KB |
调查经过
1. 初步排查
首先排除了以下可能性:
- 子代理触发: 主会话中没有
enqueue操作指向这些会话 ID - 插件 Hook 输出: 搜索所有插件脚本,没有代码会输出
C:/Program Files/Git/help - 定时任务/Cron: 没有相关触发记录
- MCP Channel/Bridge: 没有远程消息记录
- 剪贴板粘贴: 剪贴板中没有此内容,且四个时间点分散
2. 日志分析
每个问题会话的 JSONL 文件都以 queue-operation 开头:
{"type":"queue-operation","operation":"enqueue","timestamp":"2026-05-09T07:01:28.124Z","content":"C:/Program Files/Git/help"}
{"type":"queue-operation","operation":"dequeue","timestamp":"2026-05-09T07:01:28.126Z"}
{"type":"progress","data":{"hookEvent":"SessionStart"...}关键发现:
- enqueue-dequeue 间隔仅 2ms,明显是程序化输入而非用户手动输入
- 正常会话的 JSONL 文件以
SessionStart hook开头,没有 queue-operation - 问题会话的 queue-operation 是文件的第一条记录
3. 核心异常
正常会话开始流程:
进程启动 → SessionStart hook → REPL 初始化 → 等待用户输入 → 直接处理(无 queue)
问题会话启动流程:
进程启动 → queue-operation enqueue(异常)→ dequeue → SessionStart hook → 处理入队消息
这说明消息在会话启动期间被注入了队列。
4. 根因未知但范围确认
确认的事实:
- 何时: 会话启动期间内容被注入队列
- 何物: 注入内容是
C:/Program Files/Git/help - 速度: 2ms 间隔表明程序化输入
未确认:什么进程/组件触发了注入
可能的调查方向:
- stdin 捕获机制(session initialization 期间)
- Windows Terminal 缓冲区行为
与其他 Issue 的区分
系统自动标记了 3 个可能重复的 issue,但我们确认这是不同的问题:
| Issue | 核心问题 | 症状 |
|---|---|---|
| #57413 | 僵尸进程持有全局锁文件 | CLI 卡在 loading 动画 |
| #50865 | 后台 shell 在会话结束后继续运行 | 现有会话中意外执行命令 |
| #55893 | 后台 bash 任务卡住 | 任务显示 "running" 但实际卡住 |
| #57605 | 未知 - 队列注入检测到 | 意外创建新会话,内容为幽灵输入 |
前三者是进程生命周期管理问题(孤儿/僵尸进程),本 issue 是队列注入问题。
提交 Issue
已提交 Issue: https://github.com/anthropics/claude-code/issues/57605(opens in a new tab)
Issue 被自动标记为可能重复,已提交评论说明与其他 Issue 的区别。
经验教训
- 日志分析很重要: JSONL 文件记录了完整的会话流程,是排查问题的关键
- 对比正常行为: 发现异常的关键是了解正常流程是什么样的
- 如实记录未知: 根因不确定时明确标注,为后续调查提供方向
相关链接
最后更新: 2026-05-09