Node.js 消除子进程数据的缓冲
我尝试从node.js脚本(parent)创建一个子进程,这样父数据流和子数据流之间就不会发生干扰。父进程应该只有在子进程启动时才具有子进程id,并且能够终止它Node.js 消除子进程数据的缓冲,node.js,parent-child,child-process,Node.js,Parent Child,Child Process,我尝试从node.js脚本(parent)创建一个子进程,这样父数据流和子数据流之间就不会发生干扰。父进程应该只有在子进程启动时才具有子进程id,并且能够终止它child\u process.exec执行我需要的部分操作,但不幸的是它缓冲了child的输出,因此当缓冲区满时,child崩溃。有没有办法消除缓冲?子进程本质上是无限的(数据流)。或者是否有其他方法来实施控制 代码示例(仅用于演示): 我尝试过spawn,但是如果使用child\u进程,子-父干扰更严重。相反,spawn应该可以使用s
child\u process.exec执行我需要的部分操作,但不幸的是它缓冲了child的输出,因此当缓冲区满时,child崩溃。有没有办法消除缓冲?子进程本质上是无限的(数据流)。或者是否有其他方法来实施控制
代码示例(仅用于演示):
我尝试过spawn
,但是如果使用child\u进程,子-父干扰更严重。相反,spawn
应该可以使用stdio
的选项调用它:
spawn(cmd, [], { stdio: 'ignore' });
编辑:
如果你是Promise
的粉丝,我写了一个util fn来帮助你
const quietSpawn = (cmd, args = []) => {
const splitCmd = cmd.split(' ');
if (splitCmd.length > 1) {
[cmd, ...args] = splitCmd;
}
return new Promise((resolve, reject) => {
const proc = spawn(cmd, args, { stdio: 'ignore' });
proc.on('exit', resolve);
proc.on('error', reject);
});
};
它应该是顶部的spawn
而不是exec
const quietSpawn = (cmd, args = []) => {
const splitCmd = cmd.split(' ');
if (splitCmd.length > 1) {
[cmd, ...args] = splitCmd;
}
return new Promise((resolve, reject) => {
const proc = spawn(cmd, args, { stdio: 'ignore' });
proc.on('exit', resolve);
proc.on('error', reject);
});
};