在具有零宽度终端的流式闭包中运行 `print` 时,内存分配无限
QQ 错误报告表单
- 我对问题追踪器进行了基本搜索,找到任何类似的现有问题。
- [x]我检查过 我的版本至少是最新的稳定发布 通过我的安装方法。
描述错误
我和Pi代理商一起写 Nushell 脚本时碰到了这个: 它意外地分配了 大量的内存 并冻结了机器
当Nushell的stdout是一个tty (pty) 有** 窗口大小为 0 列**,呼号为"印刷" 在一条流管内(例如:`. . . . . . . . . 内存分配:RSS在大约1 GB/s时增长,CPU使用率接近100%, 过程一直运行到被OOM杀手杀死。
如果给同一 pty 的普通窗口大小, 问题会完全消失 (`Stty Cols 100'),或如果Nushell的"tdout"不是"tty".
页:1
- `COLUMNS ' 环境变量并不能避免这一问题;nushell似乎读作: 只有Tty的"TIOCGWINSZ".
- 间接证据:从关闭处取出 " 印 " 出,只归还该元素
(
每个 l|l}l}l}l}l}l}l}l}l}l}l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)t)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l causesl causesl causesl)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)不能将表格放入0栏!',这表明Nushell确实看到宽度为0。 - 只叫 " 印刷 " 一次(不是在连续关闭内)不会触发。
- 在终端宽度为0时,看起来与`印刷'的渲染/包装逻辑有关,但 我没有挖掘来源。
如何繁殖
关键条件:nushell的stdout必须是一出0列pty. 书状(1)'仅未能取得 窗口大小——因此只创建 “ 0x0” pty —— 当它自己的 stdin 不是 tty ** 时。 因此,需要XQ/dev/null;没有它,script'将继承当前大小
终端和本期不转载:
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 脚本 -qec "nu --no-config-file -c" 1.3 – each {| {| print print | } } } } } } } } } } } {| {| {| {| {| {| {| {| {| {| {|
上面的命令并不依赖于任何外部程序. 我遇到的其实是
用于外部命令输出的相同模式 :
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
脚本 -qec "nu -- no-config-file -c' ^bash -c\" \"echo a\" \\\行\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\在真正的终端上运行第一个命令(Stty size' =23 115'),`nu'的RSS仍然
发展到3047米B,不得不终止.
观察:`nu'进程'的RSS每秒增长大约1GB,CPU占近100%, 它永远不会离开——直到被OOM杀手杀死。 数据 " 印刷 " 的数量 生产是很小的,但过程总是分配。
预期行为
使用零宽终端, " 打印 " 应当只是正常打印(或至少出错,或 倒回一些默认宽度)而不是无约束地分配内存.
QQ 配置
| 键值 |
|---|
| . . . . . . . |
内容来源: nushell/nushell