美文网首页
nodejs 多进程篇

nodejs 多进程篇

作者: Dathan | 来源:发表于2019-08-11 22:09 被阅读0次

nodejs 多进程篇

子进程创建模块 child_process

  1. spawn() : 启动一个子进程用来执行命令
  2. exec() : 启动一个子进程来执行命令,通过回调函数获取子进程的情况
  3. execFile(): 启动一个子进程用来执行命令
  4. fork(): 与spqwn类似,但是必须指定js文件或模块

用例

一. spawn 启动子进程

  1. 执行操作系统命令

try {
    let cp = require('child_process');
    let ll = cp.spawn('ls', ['-l']);
    ll.stdout.on('data', function(data){
        console.log('ll.stdout : \n',data.asciiSlice());
    });
    ll.stderr.on('data', function(data){
        console.log('ll.stderr : \n',data.asciiSlice());
    });
    ll.on('exit', function(code, signal){
        console.log('child process exit => code : '+code, ' signal : ', signal);
    });
} catch (e) {
    console.log('error ', e.message);
}

  1. 启动一个node文件
try {
    let cp = require('child_process');
    let worker = cp.spawn('node', [`${__dirname}/work.js`]);
    
    worker.stdout.on('data', function(data){
        console.log('worker.stdout : \n',data.asciiSlice());
    });
    worker.stderr.on('data', function(data){
        console.log('worker.stderr : \n',data.asciiSlice());
    });
    worker.on('exit', function(code, signal){
        console.log('child process exit => code : '+code, ' signal : ', signal);
    });
} catch (e) {
    console.log('error ', e.message);
}

exec 创建子进程

  1. 启动linux命令
try {
    let cp = require('child_process');
    let ll = cp.exec('ls -l', function(err, stdout, stderr){

    });
    
    ll.stdout.on('data', function(data){
        console.log('ll.stdout : \n',data);
    });
    ll.stderr.on('data', function(data){
        console.log('ll.stderr : \n',data.asciiSlice());
    });
    ll.on('exit', function(code, signal){
        console.log('child process exit => code : '+code, ' signal : ', signal);
    });
} catch (e) {
    console.log('error ', e.message);
}
  1. 启动node文件
try {
    let cp = require('child_process');
    let worker = cp.exec('node ./work.js', function(err, stdout, stderr){

    });
    
    worker.stdout.on('data', function(data){
        console.log('worker.stdout : \n',data);
    });
    worker.stderr.on('data', function(data){
        console.log('worker.stderr : \n',data.asciiSlice());
    });
    worker.on('exit', function(code, signal){
        console.log('child process exit => code : '+code, ' signal : ', signal);
    });
} catch (e) {
    console.log('error ', e.message);
}

execFile :使用方法同 exec

fork 启动子进程只能启动通过node启动js文件

try {
    let cp = require('child_process');
    let worker = cp.fork('work.js');

    worker.on('exit', function(code, signal){
        console.log('child process exit => code : '+code, ' signal : ', signal);
    });
} catch (e) {
    console.log('error ', e.message);
}

相关文章

  • nodejs 多进程篇

    nodejs 多进程篇 子进程创建模块 child_process spawn() : 启动一个子进程用来执行命令...

  • nodejs进程

  • Nodejs child_process学习

    Nodejs子进程、多进程 我们都知道 Nodejs 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样...

  • 5. 进程管理

    NodeJS可以感知和控制自身进程的运行环境和状态,也可以创建子进程并与其协同工作,这使得NodeJS可以把多个程...

  • pm2--一个nodejs进程管理工具

    pm2是针对nodejs的项目进程管理工具,可以方便管理多个nodejs进程。 常用命令: 启动 pm2 star...

  • Nodejs如何充分利用多核CPU

    Nodejs单进程带来的问题 大家都知道, nodejs是单进程单线程的,但是现在的服务器基本都是多核的,这导致了...

  • Nodejs child_process

    nodejs以单线程模式运行,但使用事件驱动处理并发,有助于创建多个子进程提高性能。默认nodejs父子进程会建立...

  • forever

    使用forever运行nodejs应用何为forever forever可以看做是一个nodejs的守护进程,能够...

  • nodejs 进程管理

    之前一直是用screen管理进程 1.给应用程序开个screen,如:screen ,进入程序目录, 然后启动程序...

  • Nodejs 进程信号

    前言 首先我们来看一个简单的master/worker的例子 worker程序 信号接收 首先无论在子进程还是父进...

网友评论

      本文标题:nodejs 多进程篇

      本文链接:https://www.haomeiwen.com/subject/trfejctx.html