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");

  

  

posted @ 2021-08-18 21:15  break_happy  Views(160)  Comments(0Edit  收藏  举报