我有一些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!');
});
正如您所看到的,我在来自子进程的每个控制台输出之前添加了一个小标记,以便我可以识别哪个作业输出哪个消息。
它在大多数情况下工作得很好,但有时(随机地,在我看来)来自子进程的消息在它之前没有标记,好像它是由父进程输出的。
我处理子进程(或我的标记)的方式有问题吗?