子进程输出有时被认为来自父进程?

时间:2015-05-25 20:19:16

标签: javascript node.js

我有一些Node.js脚本,我加载了我的应用程序。我希望尽可能保持模块化工作,这就是我使用子进程的原因。以下是加载我的作业文件的代码:

var job_files = glob.sync('**/*.js', {cwd: __dirname+'/jobs'});

var child_processes = [];
async.each(job_files, function(job_file, cb) {
  var i = job_files.indexOf(job_file);
  child_processes[i] = exec('node '+__dirname+'/jobs/'+job_file);
  child_processes[i].stdout.on('data', function(data) {
    // Regex to eliminate extra new lines
    console.log('[w%s] %s', i, data.replace(/^\s+|\s+$/g, ""));
  });
  child_processes[i].stderr.on('data', function(data) {
    console.log('[w%s] %s', i, data.replace(/^\s+|\s+$/g, ""));
  });
  child_processes[i].on('close', function(code) {
    console.log('[w%s] Exit code: %s', i, code);
  });
}, function(err) {
  console.log('Jobs loaded!');
});

正如您所看到的,我在来自子进程的每个控制台输出之前添加了一个小标记,以便我可以识别哪个作业输出哪个消息。

它在大多数情况下工作得很好,但有时(随机地,在我看来)来自子进程的消息在它之前没有标记,好像它是由父进程输出的。

我处理子进程(或我的标记)的方式有问题吗?

0 个答案:

没有答案