我生成一个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
的实际含义是什么以及它们之间的区别
答案 0 :(得分:0)
来不及回答抱歉,但对于其他正在寻找的人...起初我对此也感到困惑,并且文档有些浅。
inherit
意味着父进程的stdios(stdin,stdout,stderr)将移交给子进程。因此,如果将子进程上的stdin设置为inherit
,则任何按键都将针对子进程而不是父进程。
pipe
意味着父级和子级的stdio都映射在一起。但是,通过这些点访问管道数据是通过事件进行的。因此,如果生成标准输出为pipe
的子进程,则可以通过使用childProcess.stdout.on('data', callbakFn)