我生成一个 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)来访问该进程的任何输出

09-15 20:11