Replies: 3 comments
|
补一条范围说明,因为它解释了「为什么只有我一个人报这个」,对定位可能有用。
const inspector = this.terminalInspector ?? createProcessInspector();在 stock 的 Windows 上, 这个回归只在「已经补上 inspector」的环境里才显形。 目前会踩到的是通过 顺带说,这也意味着上游修好 node-pty 这条之后,win32 的 inspector 缺口仍然独立存在,两件事互不替代。 如果需要,我这边的 |
|
报告抓到了版本边界,但 pid 0 在 node-pty >= 1.2.0-beta.11 上不一定表示子进程已经退出。该版本在 Windows 上延迟完成 ConPTY connect,官方使用方 VS Code 也专门处理了“spawn 后 pid 暂时为 0”:等待首个 data event 后再读取真实 pid。 当前 DSH 的 LocalTerminalHandle 构造函数 会立即固定 this.pid = terminal.pid,并立刻用该值做 process-tree identity 捕获;这与新的 node-pty 生命周期不兼容。 建议:
需要一个 windows-latest 原生 smoke:spawn 持久 PowerShell/cmd、等待 ready、写入唯一 token、读回、确认 pid > 0、terminate 后无残留。单元测试可模拟“初始 pid 0 → 首个 data 后真实 pid”,但不能替代该 smoke。 |
|
跑完了二分,结果比我昨天写的更精确,其中一条要更正我自己的判断。 结果
更正昨天我把 所以这里其实是两件独立的事:
对 rc.7 来说结论不变 —— 它钉的正是 对上游的建议如果只是想让 Windows 恢复可用, 我这边保留了这套矩阵(手动触发,不是 CI 门禁),如果你们想加别的组合(别的 Node 版本、别的 shell、加上 工作流和全部日志在 https://github.com/sjh9714/dsh-win32/actions/runs/32086206139 |
Uh oh!
There was an error while loading. Please reload this page.
症状
rc.7 之后,Windows 上的持久 PTY shell 起不来了。同一个 commit、同一套 smoke,Linux 和 macOS 全过,只有 win32 失败。
pid 0是关键。rc.6 上同一个 smoke 打印的是真实 pid(例如pty spawned on win32: pid 7400),Linux 和 macOS 这次也都是真实 pid(2708/54370)并通过。win32 拿到 0,然后第一次write时进程已经没了。根因
rc.7 把
node-pty从^1.1.0提到了1.2.0-beta.15。这是 rc.6 与 rc.7 之间在这条路径上唯一的依赖变化。
实测环境
windows-latestGitHub runner,Node 22.23.2ubuntu-latest与macos-latest全过单元测试看不见这个。 我这边 94 个单元测试在完整 rc.7 依赖集下全绿,
tsc也干净。只有在真实操作系统上 spawn 真实 PTY 的那一步会炸。附带确认
顺便确认两件与本问题无关但可能有人关心的事,都是在 rc.7 发布包里看的,不是推测。
createProcessInspector在 win32 上仍然 throwterminal inspection is unsupported on platform win32this.terminalInspector ?? createProcessInspector()这个注入座仍然在所以这次的问题不在那条线上,是 node-pty beta 的 Windows 路径。
我这边做了什么
把 peer 范围从
>=0.1.0-rc.5 <0.2.0收到>=0.1.0-rc.5 <0.1.0-rc.7。对一个只服务 Windows 的插件来说,一个说「还不行」的 ERESOLVE 比一个启动即死的持久 shell 好。等这条修好会立刻放开。如果需要更多信息(完整 workflow 日志、其它 Node 版本、或者在
1.2.0-beta.x里二分找具体哪一版引入),我这边有 Windows CI,随时可以跑。All reactions