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

      

      

  • 相关阅读:
    快速排序
    将指定目录下的所有子文件或子目录加载到TreeView
    导入英汉文本,用字符串切割,泛型集合存储的英汉字典
    取年月日的字符串方法
    简化的MVC-导入模板HTML,导入数据txt,用字符串方法生成JS菜单
    索引器的使用
    打开文件练习
    泛型委托
    将正则表达式转化成确定的有限自动机
    青蛙过桥
  • 原文地址:https://www.cnblogs.com/breakdown/p/15158862.html
Copyright © 2020-2023  润新知