process 实现多进程

Node.js 使用child_process 实现多进程

分类:Node.js 杂货

nodejs是一种单线程模型,但是,,使用nodejs的child_process模块可以实现多进程任务。利用child_process可以创建子进程,实现子进程和主进程之间的通信。

nodejs v0.12.7版本child_process提供以下同步和异步的方式创建进程:

异步创建:)(command[, options], callback)))同步创建:)))

各函数及参数文档可见 文档

spawn 函数

例 1

var spawn = require(‘child_process’).spawn,ls = spawn(‘ls’, [‘-lh’, ‘/usr’]);{console.log(‘stdout: ‘ + data);});{console.log(‘stderr: ‘ + data);});(‘child process exited with code ‘ + code);});

运行结果

$ node child_process.js stdout: total 76Kdrroot root 20K Jul 23 11:15 bindrwxrroot root 4.0K Sep 23 2011 etcdrwxrroot root 4.0K Sep 23 2011 gamesdrwxrroot root 4.0K Nov 29 2014 includedrroot root 4.0K Nov 19 2014 libdrroot root 20K Nov 29 2014 lib64drwxrroot root 4.0K Nov 21 2014 libexecdrwxrroot root drroot root 4.0K Jun 16 15:33 sbindrwxrroot root 4.0K May 7 09:48 sharedrwxrroot root 4.0K Mar 27 2013 srclrwxrwxrwxtmp -> ../var/tmpchild process exited with code 0

例 2 花式实现ps ax|grep child

var spawn = require(‘child_process’).spawn,ps = spawn(‘ps’, [‘ax’]),grep = spawn(‘grep’, [‘child’]);{grep.stdin.write(data);});{console.log(‘ps stderr: ‘ + data);});(code !== 0) {console.log(‘ps process exited with code ‘ + code);}();});{console.log(” + data);});{console.log(‘grep stderr: ‘ + data);});(code !== 0) {console.log(‘grep process exited with code ‘ + code);}});

输出

-bash-pts/4 T0:00 vim child_process.js30870 pts/4 T0:00 vim child_process.jsexec 函数

例 1 统计文件字数,3列分别为 行数、字数、字节数

var exec = require(‘child_process’).exec,child;child = exec(‘cat child_process.js | wc’, function(error, stdout, stderr) {console.log(‘stdout: ‘ + stdout);console.log(‘stderr: ‘ + stderr);if (error !== null) {console.log(‘exec error: ‘ + error);}});

输出

-bash-4.1$ node child_process.js stdout:1035287stderr:

exec函数第二个可选参数默认值:

{ encoding: ‘utf8’, timeout: 0, maxBuffer: 200*1024, killSignal: ‘SIGTERM’, cwd: null, env: null }

exec函数不安全,使用用户输入作为参数时不应使用

execFile 函数

例 1

var childProcess = require(‘child_process’);childProcess.execFile(‘/bin/ls’, [‘-l’, ‘.’], function(err, result) {console.log(result)});

输出

-bash-4.1$ node child_process.js total 4-child_process.js

使用execFile安全防注入

fork 函数

fork 可以实现父进程和子进程的通信 main.js

var childProcess = require(‘child_process’);var child = childProcess.fork(‘./child.js’);child.on(‘message’, function(msg) {console.log(“Main on message: “, msg);});child.send({message: “I love you !”});

child.js

process.on(‘message’, function(m) {console.log(‘Child listen:’, m);});process.send({ message: ‘You love me’});

运行main.js

: { message: ‘I love you !’ }: { message: ‘You love me’ }

版权声明:本文为博主原创文章,未经博主允许不得转载。

上一篇Javascript 生成流程图

顶0踩0

耿耿于怀着过去和忐忑不安着未来的人,也常常挥霍无度着现在。

process 实现多进程

相关文章:

你感兴趣的文章:

标签云: