我正在使用此节点脚本作为我的项目的"跑步者"(需要同时启动/停止三个脚本).现在我想知道从节点进程内部生成的child_process是否将使用我的服务器所拥有的多核(我对90%有信心,但是比安慰更安全).
var CP = require("child_process")
, children = [ 'server1', 'server2', 'server3' ]
, child
children.forEach(function(name) {
child = CP.spawn("node", [name] )
child.stdout.on('data', function (data) {
process.stdout.write(data.toString());
})
child.stderr.on('data', function (data) {
process.stdout.write(data.toString());
})
}
});
Run Code Online (Sandbox Code Playgroud)
操作系统是Ubuntu Linux.
对.spawn()在操作系统级别创建全新的流程.
您甚至可以使用pipe()以下方法简化它:
var spawn = require("child_process").spawn
, children = [ 'server1', 'server2', 'server3' ]
, child
children.forEach(function(name) {
child = spawn("node", [name] )
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
// Catch errors (dies quite hard on first child with non-zero exit code...)
child.on('exit', function (code) {
if(code !== 0) {
process.exit(code);
}
});
});
Run Code Online (Sandbox Code Playgroud)
(还添加了监听器exit,所以它至少会以某种方式传播错误.如果你想做什么,你可能想要跟踪它们直到最后一个进程完成,然后process.exit()用最大或最小的代码调用...)