Node父进程与子进程

子进程
  • 共享内存空间
  • 子进程之间互相通信实现信息交换
  • 子进程之间共享端口,分配请求
基本操作
/**************stdin*************/
process.stdin.resume();
process.stdin.on("data", function(chunk) {
    process.stdout.write("进程收到数据:" + chunk);
});

/**************process.argv*************/
process.argv.forEach( function(val, index, array) {
    console.log(index + ': ' + val);
});

/**************nextTick*************/
function foo() {
    console.log("foo");
}

process.nextTick(foo);
console.log('bar');
// 与上面作用一样
setTimeout(foo,0)
console.log('bar');

/**************events*************/
process.on("exit", function() {
    console.log("process exits");
})
//异常退出

process.on("uncaughtException", function(err) {
    console.log('catch an uncaughtException:'+ err);
})

//process.exit();
/************** Signal events*************/

process.on("SIGINT", function() {
    console.log('receive SIGINT signal');
    process.exit();
})
使用spawn创建子进程
  • chlid_process(command,[args],[options])
  • command:运行的命令
  • args:传给命令的参数
  • options:开启子进程的选项
  • 子进程完成IO后自动退出
var child_process = require('child_process');

/************** child_process*************/
var opts = {
    stdio:['pipe','pipe',process.stderr]
}

var spawn = child_process.spawn;

var sp1 = spawn('node', ['server.js']);
var sp2 = spawn('node', ['client.js'],{
  stdout:'ignore'});

sp1.on("exit", function(code, signal) {
    if (!code) {
        console.log('sp1 exit, signal:' + signal);
    } else {
        console.log('sp1 exit, signal:' + signal);
    }
    process.exit();
})

sp2.stdout.on('data', function(data) {
    console.log("subProcess2:" + data);
});

sp2.on("close", function(code, signal) {
    console.log('sp2 close all stdio');
})
sp2.on("error", function(code, signal) {
    console.log('sp2 error');
})

sp2.on("exit", function(code, signal) {
    console.log('subProcess2 exits');
    console.log('sp2 id:' + sp2.pid);
    sp1.kill("SIGTERM");
})

process.on('exit', function() {
    console.log('main process exits');
})
  • 默认情况下,只有子进程全部退出,父进程才能退出
  • 设置options的detached属性为true,使得允许父进程先退出,子进程继续执行IO
  • 如果父进程与子进程共享IO,则父进程不允许先退出,主要子进程主动调用unref()方法才行

                
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值