child_process 子进程
2016-07-11 17:35
316 查看
创建子进程,使其可以在进程中执行操作,应用系统命令等。nodejs创建子进程有四种方法,分别是spawn,fork,exec,execFile。
回调 : spawn和fork没有直接的回调。spawn通过事件监听处理; fork相当于直接执行一个node程序;其余两个有回调,回调的参数为error,stdout,stderr;
作用 : [这里我也不是很明白,引用网上的],fork用于启动一个node进程,可以进程进程之间通信;execFile用于执行一个外部应用;spawn方法会在新的进程执行外部应用;exec这个方法将会生成一个子shell,能够在shell中执行命令。
spawn
* command 命令指的是windows或者linux系统命令,如果报错
* 这里的args是选填,有些命令需要加参数,比如
fork
简易版的spawn,用于执行node.js文件;
exec
exec的command相当于spawn的command+args;
execFile
事件监听 error,exit,close,disconnect,message
child.stdin,child.stderr,child.stdout,child.pid//属性值子进程的PID,child.kill,child.send,child.unref() //阻止父进程等待一个给出的子进程
未完待续,如有指点,望不吝赐教!
区别 :
格式 : spawn和execFile的格式都是(command,[args]);fork的参数直接(文件名);exec的command相当于spawn的command+args;回调 : spawn和fork没有直接的回调。spawn通过事件监听处理; fork相当于直接执行一个node程序;其余两个有回调,回调的参数为error,stdout,stderr;
作用 : [这里我也不是很明白,引用网上的],fork用于启动一个node进程,可以进程进程之间通信;execFile用于执行一个外部应用;spawn方法会在新的进程执行外部应用;exec这个方法将会生成一个子shell,能够在shell中执行命令。
spawn child_process.spawn(command, [args], [options])
* command 命令指的是windows或者linux系统命令,如果报错spawn xx ENOENT则指在windows系统运行linux命令,或者相反。
* 这里的args是选填,有些命令需要加参数,比如
cat a.txt,则格式为spawn('cat',['a.txt']);有些命令不需要参数,比如
ls,则直接spawn('ls'),一些辅助命令如'-a','-m'等也放到数组中;
//windows系统下的命令; var spawn = require('child_process').spawn, free = spawn('cat', ['a.txt'],{cwd:'./a'}); // 捕获标准输出并将其打印到控制台 free.stdout.on('data', function (data) { console.log('标准输出:' + data); }); // 捕获标准错误输出并将其打印到控制台 free.stderr.on('data', function (data) { console.log('标准错误输出:' + data); }); // 注册子进程关闭事件 free.on('exit', function (code, signal) { console.log('子进程已退出,代码:' + code); }); ---------- //同步的spawn; var spawn = require('child_process').spawnSync('cat',['a.txt']); console.log(spawn.stdout.toString());
fork child_process.fork(modulePath, [args], [options])
简易版的spawn,用于执行node.js文件;var fork = require('child_process').fork('a.js'); ---------- var spa = require('child_process').spawn('node',['a.js']); spa.stdout.on('data',function(data){ console.log(data.toString('utf8')); })
exec child_process.exec(command, [options], callback)
exec的command相当于spawn的command+args;var exec = require('child_process').exec; exec('cat a.txt',function(error,stdout ,stderr ){ console.log(stdout); }); ---------- //同步的exec方法; var execSync = require('child_process').execSync; var s = execSync('cat a.txt'); console.log(s.toString());
execFile child_process.execFile(file, args, options, callback)
var execFile = require('child_process').execFile; execFile('cat',['a.txt'],function(error,stdout ,stderr ){ console.log(stdout); });
主进程与子进程的通信
//例子来源于网络 //parent.js const cp = require( 'child_process'); const n = cp.fork( `./sub.js`); n.on( 'message', ( m) => { console.log( 'PARENT got message:', m); }); n.send({ hello: 'world' }); //sub.js process.on( 'message', ( m) => { console.log( 'CHILD got message:', m); }); process.send({ foo: 'bar' });
事件监听 error,exit,close,disconnect,message
child.stdin,child.stderr,child.stdout,child.pid//属性值子进程的PID,child.kill,child.send,child.unref() //阻止父进程等待一个给出的子进程
未完待续,如有指点,望不吝赐教!
相关文章推荐
- [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作
- 解决eclipse building workspace慢的情况
- mina服务器、客户端
- jQuery+CSS3产品360度预览特效
- shell - 查看天气
- 多种方式实现滑动p91--105
- WCF服务编程-契约回调
- oracle clob 最大存储
- #include<algorithm>里的函数
- iOS 获取本地的坐标
- Android WebView中软键盘会遮挡输入框相关问题
- JavaScript模板引擎原理,几行代码的事儿
- 11.ThinkPHP 3.1.2 连贯操作
- zabbix性能调优
- Andrew Ng机器学习之三 多变量线性回归
- uva1329 合作网络
- Linux下PHP环境搭建
- android 资源文件命名规则 drawable mipmap一样的
- 11.ThinkPHP 3.1.2 连贯操作
- 11.ThinkPHP 3.1.2 连贯操作