参考文献:[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()方法。