首页 > 解决方案 > “继承”和“进程管道子”之间的区别

问题描述

我生成一个 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和区别是什么

标签: node.js

解决方案


抱歉,回答有点晚了,但是对于正在寻找的其他人……我起初也对此感到困惑,并且文档有点轻。

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

pipe表示父级和子级的标准输入输出映射在一起。但是,通过这些点访问管道数据是通过事件访问的。因此,如果您生成一个标准输出为 的子进程pipe,则可以通过使用访问该进程的任何输出childProcess.stdout.on('data', callbakFn)


推荐阅读