node.js - “继承”和“进程管道子”之间的区别
问题描述
我生成一个 shell 来读取输入然后执行
const { spawn } = require('child_process')
const child = spawn('while :;do read a;$a;done', [], { shell: true,stdio:'inherit' })
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`)
})
,stdio:'inherit'
它将消耗 100% 的 cpu。但是如果我删除stdio:'inherit'
并添加process.stdin.pipe(child.stdin)
,它会完美运行
医生说
'inherit' - equivalent to [process.stdin, process.stdout, process.stderr]
那么它们的实际含义inherit
和区别是什么
解决方案
抱歉,回答有点晚了,但是对于正在寻找的其他人……我起初也对此感到困惑,并且文档有点轻。
inherit
意味着父进程的标准输入输出(stdin、stdout、stderr)将被移交给子进程。因此,如果子进程的标准输入设置为inherit
,则任何按键都将针对子进程而不是父进程。
pipe
表示父级和子级的标准输入输出映射在一起。但是,通过这些点访问管道数据是通过事件访问的。因此,如果您生成一个标准输出为 的子进程pipe
,则可以通过使用访问该进程的任何输出childProcess.stdout.on('data', callbakFn)
推荐阅读
- python - 如何使用 Python 在 Excel 电子表格中绘制形状?
- ms-access - FROM 子句中的运行时错误 3131 语法错误 - Microsoft 访问
- python - 从 django 视图上下文字典中传递数据以响应组件
- python - 如何从python中的文本文件中删除重复的单词
- git - (已解决)尝试连接到 GitHub 时,SSH 和 HTTPS 密钥对我的 Eclipse 不起作用
- angular-universal - 禁用 NGUniversal Routes 和 bootstrap.min.css.map?
- groovy - 如何使用 @Value 注释从 cloudformation 中获取环境变量
- autocomplete - 如何在文本框中为基本的自动完成标签编码?
- reactjs - 优化从 getStaticProps 接收的数据的渲染(数据有时在初始渲染时不可见)
- ios - 如何使游戏手柄在 Cordova 的 iOS 上工作?