我生成一个 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
意味着父进程的stdios(stdin,stdout,stderr)将移交给子进程。因此,如果将子进程上的stdin设置为inherit
,则任何按键都将针对子进程而不是父进程。pipe
表示父级和子级的stdio都映射在一起。但是,通过这些点访问管道数据是通过事件进行的。因此,如果您生成带有pipe
标准输出的子进程,则可以通过使用childProcess.stdout.on('data', callbakFn)
来访问该进程的任何输出