答案1
这个错误是 Atom 中一些有问题的设计造成的。此外,它并不是 Z Shell 特有的。人们在使用其他贝壳时也会遇到这种情况。
由于某种原因,Atom 想要了解交互式登录 shell 的环境变量。为此,它会生成您选择的 shell 的一个实例,告诉它env
使用 shell 的命令行选项运行命令(在运行所有启动脚本之后)-c
,并捕获其输出。它试图确保它不会遇到任何 shell 别名,因此它会运行command env
,并尝试获取环境,就像登录shell 也可以为您选择的 shell 提供-l
命令行选项。
Atom 开发人员发现人们没有正确设置环境非交互式登录外壳。为了解决这个问题,他们做到了还为 shell 提供-i
选项,告诉 shell 认为它是一个交互的登录 shell,即使其标准 I/O 没有出现交互的。
不幸的是,它们碰巧以这样的方式调用交互式 shell,即 Z Shell 等 shell 会全力以赴地尝试以交互方式读取输入。但 Atom 不向它们提供任何输入,只提供文件结尾。
输入 Z Shell 和 Bourne Again shell 的ignoreeof
选项作为这部喜剧的最后一个元素。这些选项意味着 shell继续尝试读取输入,即使它们在标准输入上得到文件结尾。他们在一个非常紧密的循环中这样做。因此CPU使用率。
进一步阅读
- 丹尼尔·斯通(2016-10-27)。 收集环境变量的 shell 会在 Linux 上创建 100% CPU 进程失控。 Atom 错误追踪器。第13084章