Node doesn't reset tty on early/aborted exit
还没有人认领这个 Issue。
- 主要语言
- JavaScript
- 星标
- 122k
- 派生
- 37.4k
- 平均合并
- 4 天 3 小时
- 30 天内合并 PR
- 272
描述
Version
v16.13.1, v17.2.0 tested
Platform
Linux lux0 5.11.22-100.fc32.x86_64 #1 SMP Wed May 19 18:58:25 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Subsystem
No response
What steps will reproduce the bug?
Create this script file in test.js:
#!/usr/bin/env node
for (let i = 0; i < 100000; i++) {
console.log("i:", i)
}
In a shell window, run:
test.js |less
Hit "q" to quit less (after only one page of output), which also kills test.js while it still has undelivered data in the stdout buffer.
Your tty will be left in raw mode (no echo, other command characters disabled). Must do a "stty sane" to restore usability of the console.
How often does it reproduce? Is there a required condition?
Happens every time. Have tested multiple versions of node on Linux and MacOS.
What is the expected behavior?
Should restore my tty settings no matter how ugly the exit conditions.
What do you see instead?
Tty is left in raw mode with no echo. Can't see my typed commands.
Additional information
Is there a standard way of dealing with this in case a script is killed before it can write its output? Or is this a bug in node?
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先使用 test.js 脚本和 test.js | less 重现报告的问题,然后检查 Node.js 在进程中止或提前退出期间如何处理终端状态。添加在输出仍处于缓冲状态时退出 less 的回归测试,并验证 tty 无需 stty sane 即可恢复正常。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript, node.js
- 领域
- cli, operating-systems
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 活跃
- 描述清晰度
- 需要澄清
- 新手友好度
- 45/100