Quest 长程任务下终端管理服务(ptyhost)无声崩溃,自动重启失败,导致"终端进程启动失败"弹窗反复出现

# Qoder 缺陷反馈:Quest 长程任务下终端管理服务(ptyhost)无声崩溃,自动重启失败,导致"终端进程启动失败"弹窗反复出现

## 一、问题摘要

在 Quest 模式下执行长程 AI 任务时,弹窗报错:

> 终端进程启动失败: A native exception occurred during launch (posix_spawnp failed.)。

该问题自 2026-08-25 起已发生 **3 次**(8/25、8/27、8/28),规律一致:**IDE 连续运行大半天、Quest 长程任务持续执行数百条命令后出现**。重启 IDE 后恢复,但无法根治,严重影响长程任务的连续性。

本机环境已完全排除嫌疑(详见第六节排除项),定性为产品缺陷。

## 二、环境信息

| 项目 | 值 |

|—|—|

| 系统 | macOS Ventura 13.2.1(darwin 22.3.0),Apple Silicon (aarch64) |

| Qoder 版本 | 1.26.0,commit `3807f77f6c20361359e5f7dbc95cad0f70711d41`(构建于 2026-08-24) |

| 使用模式 | Quest 模式长程任务,单次连续运行 6~24 小时不重启 |

| shell | /bin/zsh(macOS 自带,未替换) |

## 三、8/28 案发完整时间线(当场抓获)

| 时间 | 事件 | 证据来源 |

|—|—|—|

| 20:24:55 | sharedprocess 每 5 分钟一次的规律心跳(SecurityPolicy)写下最后一条后**断绝**,此后一个多小时无恢复 | `logs/20260827T210138/sharedprocess.log` |

| 20:25~20:44 | Quest 任务仍在执行命令(兜底通道),期间 20:31:57 → 20:44:44 出现 13 分钟异常空窗 | `questWindow/renderer.log` |

| **20:44:34** | **ptyhost 写出最后一条日志 `Process exited, id: 506, exitCode: 0`,随后从进程表消失,未复活**(`ps` 全量搜索无 ptyhost 进程) | `ptyhost.log` + 进程检查 |

| 20:44:44 | renderer 发出最后一条任务命令,此后终端功能瘫痪 | `questWindow/renderer.log` |

| ~21:00 | 用户看到"终端进程启动失败 (posix_spawnp failed.)"弹窗 | 用户截图 |

## 四、量化数据

1. **Quest 负载与终端循环**:8/28 当天 Quest 执行 457 条命令,对应 506 次临时终端创建/销毁循环;8/27 单日 ptyhost.log 记录 509 次 `Process exited`(全部 exitCode: 0)。即 Quest 长程任务驱动 ptyhost 每天进行约 500 次终端开关。

2. **ptyhost 无声死亡特征**:日志至死无任何 error/warning,全部 506 个终端均正常退出(exitCode: 0),随后进程整体消失——属于无法通过崩溃报告捕获的静默死亡(见下)。

3. **伴生的句柄泄漏**:shared_client 进程(运行约 24 小时)文件句柄累积至 **3571 个**,其中 **2037 个**指向 `~/.qoder/shared_client/memories/` 下的记忆文件(疑似记忆模块读取后未关闭)。

4. **弹窗错误从不落盘**:三次发作,`ptyhost.log`、`main.log`、`renderer.log`、`sharedprocess.log`、`terminal.log` 及系统 `log show` 均无 `posix_spawnp` / `native exception` 字样。用户看到的错误在产品侧零痕迹,极不利于售后诊断。

## 五、三次发作的统一解释

| 发作日 | 现象 | 推断 |

|—|—|—|

| 8/25、8/27 | ptyhost 崩溃一次,弹一枚窗后自动恢复(sharedprocess 心跳始终正常) | ptyhost 无声崩溃 → 自动重启成功 |

| 8/28 | ptyhost 死亡后**未复活**,终端功能持续瘫痪 | sharedprocess 先行僵死(20:24 心跳断绝),自动重启协调失败 |

## 六、已排除的本机原因(均为实测,非推断)

- 内存充足:系统空闲 41%,Qoder 最大进程仅 1.5GB;

- 无崩溃报告:`~/Library/Logs/DiagnosticReports/` 无 Qoder 相关条目;

- 无系统强杀:`log show` 该时段无 jetsam / memorystatus kill 记录;

- 终端工作目录全部真实存在(含 `~/.qoder/worktree/…` 与各 overrideCwd);

- shell 为系统自带 /bin/zsh,启动 0.65 秒,普通 IDE 终端的 shell 集成探测正常工作(6 小时仅 10 次兜底,全部 457+ 次兜底集中在 Quest 临时终端);

- 已清理过 8/21 遗留的孤儿 shared_client(PPID=1)并彻底重启 IDE,弹窗依然复发,排除历史残留进程因素。

## 七、希望修复的三个点

1. **ptyhost 稳定性**:Quest 高频终端创建/销毁场景下,ptyhost 连续运行约 24 小时即无声死亡(无崩溃报告、无错误日志),建议排查其资源管理(句柄/子进程回收);

2. **自动重启可靠性**:ptyhost 死亡后的自救机制在 sharedprocess 异常时失效,建议增加看门狗与强制的自动恢复;

3. **错误可观测性**:`posix_spawnp failed` 这类终端启动失败请写入日志文件(目前完全不落盘),否则用户反馈时无法提供现场证据。

## 八、附件(本机日志路径,可按需提取上传)

- 案发日志目录:`~/Library/Application Support/Qoder/logs/20260827T210138/`(重点:`ptyhost.log` 尾部、`sharedprocess.log` 心跳断点、`questWindow/renderer.log` 20:2x 段)

- 前两次发作目录:`logs/20260825T193429/`、`logs/20260827T150418/`