Node.js速学之-子进程

参考文献:[1][EN]Georgo Ornbo.傅强.陈宗斌. Node.js入门经典[M]. 北京:人民邮电出版社.2013.4-1

Child Process 子进程是由另一个进程所创建的进程,创建子进程的进程陈为父进程。父子进程可以通过STDIN、STDOUT或STDERR进行数据流交换。
一、父进程监听子进程标准输出示例

var spawn = require('child_process').spawn;
var ping = spawn('ping',['www.baidu.com']);//通过spawn生成子进程
ping.stdout.setEncoding('utf8');
ping.stdout.on('data',function(data){
    console.log(data);
})

二、杀死子进程

var spawn = require('child_process').spawn;
var ping = spawn('ping',['www.baidu.com']);//通过spawn生成子进程
ping.stdout.setEncoding('utf8');
ping.stdout.on('data',function(data){
    console.log(data);
})
ping.on('exit',function(code,signal){
    console.log('child process was killed with a '+ signal+' signal');
});
ping.kill('SIGINT');//Child process 模块提供kill()方法,通过该方法,可以传进想让kill消息发送的消息类型。如果为空,默认为SIGTERM信号

三、与子进程通信
Child Process 模块提供一个用于创建Node.js进程的紫荆城的方法,并提供让父子进程通信通道的能力,他叫做fork()。
PS:如果仅与系统命令交互,spawn优先。因为fork()的子进程是一个V8实例,需要花费30毫秒启动,及10MB内存消耗。

var fork = require('child_process').fork;
var child  = fork (__dirname + 'child.js');//创建fork子进程
child.on('message',function(m){
    console.log('parent process received message:',m);

});
child.send({'message':'Hello child'});

child.js内容

process.on('mesage',function(m){
    console.log('child process received mesage:',m);
});

四、集群(Cluster)模块
Node.js有一个模块用于让程序以集群的方式创建子进程,并且使用单个父进程先处理到来而将请求交给另外一个子进程处理。
Cluster模块启动一个父进程,并可按用于意愿启动任意多子进程;当然在该模块中也可以使用Fork()方法。

分享到:更多 ()