javascript - 使用 child_process.spawn() 在原始模式下打开 VIM 会导致它冻结
问题描述
请注意以下脚本:
const child_process = require('child_process');
process.stdin.setRawMode(true);
process.stdin.on("data", (data) => {});
var child = child_process.spawn("vim", ["README.md"], {stdio: "inherit"});
child.on("exit", (e, code) => {
process.exit();
});
它设置原始模式,然后README.md
打开vim
。输入几秒钟后,VIM 完全停止响应。按键什么都不做,唯一的恢复方法是关闭选项卡。这个问题是通过删除on("data")
回调来解决的。我在 macOS Catalina 上使用 iTerm,节点版本v13.10.1
。这个脚本是错误的,还是 Node.js、VIM 或 iTerm 上的错误?
解决方案
这似乎是在process.stdin.on("data")
活动时引起的,这导致 Node.js 挂起等待输入。这可以通过process.stdin.pause
在产生子进程之前使用来解决,然后process.stdin.resume
在内部继续监听child.on("exit")
。
推荐阅读
- java - 如何通过java代码更改android中的颜色值
- python - 在python中对函数进行采样
- snakemake - 如何在snakemake文件中添加sbatch选项,例如--wait
- sql - 将 GROUPED BY SUM 查询与其他查询链接(使用 JOIN 或子查询)
- java - Spring boot AMQP并发监听器顺序执行?
- java - 我在打印数组中的元素时遇到问题,以便任何两个重复的元素出现一次
- javascript - 将 JS Div 反应为 png 或捕获 Div
- reactjs - beforeEach 没有开玩笑地执行
- c - 如何在c中删除或清除POSIX消息队列中的所有消息?
- java - 在 Fragment 和 activity 之间切换时 Admob 插页式广告不显示