Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 消除子进程数据的缓冲_Node.js_Parent Child_Child Process - Fatal编程技术网

Node.js 消除子进程数据的缓冲

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

我尝试从node.js脚本(parent)创建一个子进程,这样父数据流和子数据流之间就不会发生干扰。父进程应该只有在子进程启动时才具有子进程id,并且能够终止它
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);
    });
};