nodejs 多进程篇

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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值