在node.js中产生子进程的时间

时间:2018-09-30 06:13:21

标签: node.js

我正在node.js中生成一个子进程,如下所示:

const fs = require('fs');
fs.watch(filename, () => {
  const ls = spawn('ls', ['-l', '-h', filename]);
  let output = '';
  /* ... data event which collects the data */
  ls.on('close', () => {
    const parts = output.split(/\s+/);
    console.log([parts[0], parts[4], parts[8]]);
  });
}

现在什么时候才生成子进程ls?从node.js文档中,我可以看到它是以非阻塞方式异步生成的,因此我想它是立即生成的,而node.js继续处理当前的事件循环消息。但这不是暗示比赛条件吗?如果子进程在附加处理程序之前退出,会发生什么情况?如果我用setTimeout包装处理程序,它将停止工作:

// ...
setTimeout(() => {
/* ... data event which collects the data */
  ls.on('close', () => {
      const parts = output.split(/\s+/);
      console.log([parts[0], parts[4], parts[8]]);
  });
}, 500);
// ...

所以我认为这不起作用的原因是您无法从封闭的流中读取内容。那是对的吗? 如果是这样,我怎么能相信我的数据收集处理程序在为时已晚之前被附加? 一旦(缓冲的)数据从stdout中的ls被关闭,是否更有意义?我在这里完全错过了什么吗?

感谢您的帮助。

0 个答案:

没有答案