“继承”和“进程管道子”之间的区别

时间:2018-04-26 14:35:50

标签: 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的实际含义是什么以及它们之间的区别

1 个答案:

答案 0 :(得分:0)

来不及回答抱歉,但对于其他正在寻找的人...起初我对此也感到困惑,并且文档有些浅。

inherit意味着父进程的stdios(stdin,stdout,stderr)将移交给子进程。因此,如果将子进程上的stdin设置为inherit,则任何按键都将针对子进程而不是父进程。

pipe意味着父级和子级的stdio都映射在一起。但是,通过这些点访问管道数据是通过事件进行的。因此,如果生成标准输出为pipe的子进程,则可以通过使用childProcess.stdout.on('data', callbakFn)

访问该进程的任何输出