首页 > 解决方案 > 如何在 Node.js 中收听分离的未引用生成的子进程的标准输出?

问题描述

示例1:子进程确实分离,脚本立即退出

const cp = require('child_process');
const bash = cp.spawn('/bin/bash', ['-c', 'sleep 1 && echo Hello && sleep 3'], {
  stdio: 'ignore',
  detached: true,
});

bash.unref();

示例 2:我们没有忽略stdio,但现在子进程并没有真正分离,因为我们等待了 4 秒。

const cp = require('child_process');
const bash = cp.spawn('/bin/bash', ['-c', 'sleep 1 && echo Hello && sleep 3'], {
  detached: true,
});

bash.stdout.on('data', (e) => {
  if (e.toString('utf8').trim() === 'Hello') {
    console.log('Got message, can unsubscribe now');
    bash.unref();
  }
});

Node.js 中是否有一些有效的方法来实现示例 1 中的行为和示例 2 中的逻辑(监听生成的进程的标准输出)?

标签: node.jschild-process

解决方案


推荐阅读