nodejs 进程总结
child_process
child_process.spawn(command, args,options)
支持 stream 方式操作输入输出,适合数据量大的情况;可以执行任何命令;不创建 V8 实例;可以创建常驻的后台进程
对于异步命令不支持callback, 可以使用process.on来监听结果
const spawn = require('child_process').spawn;
const touch = spawn('touch',['spawn.js']);
touch.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
touch.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
touch.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
child_process.exec(order,cb(err[,stdout,stderr]))
order: 是执行的命令. 比如: rm spawn.js 支持命令执行成功后的回调函数。
使用 Buffer 来存储进程的输出,可以在回调里面获取输出结果,不太适合数据量大的情况;可以执行任何命令;不创建 V8 实例
const childProcess = require('child_process');
const ls = childProcess.exec('rm spawn.js', function (error, stdout, stderr) {
if (error) {
console.log(error.stack);
console.log('Error code: '+error.code);
}
console.log('Child Process STDOUT: '+stdout);
});
child_process.fork(order)
spawn 的一个特例(spawn("node",['app.js'])和fork('app.js') 效果相同)。但只能执行 Node 脚本;会创建一个 V8 实例;建立父子进程的 IPC 双工信息通道,两个进程之间使用process.on("message",fn)和process.send(...)进行信息的交流。
//master.js
const childProcess = require('child_process');
const worker = childProcess.fork('worker.js');
worker.on('message',function(mes){
console.log(`from worder, message: ${mes}`);
});
worker.send("this is master");
//worker.js
process.on('message',function(mes){
console.log(`from master, message: ${mes}`);
});
process.send("this is worker");

浙公网安备 33010602011771号