创建子进程,使其可以在进程中执行操作,应用系统命令等。nodejs创建子进程有四种方法,分别是spawn,fork,exec,execFile。

区别 :

  1. 格式 : spawn和execFile的格式都是(command,[args]);fork的参数直接(文件名);exec的command相当于spawn的command+args;
  2. 回调 : spawn和fork没有直接的回调。spawn通过事件监听处理; fork相当于直接执行一个node程序;其余两个有回调,回调的参数为error,stdout,stderr;
  3. 作用 : [这里我也不是很明白,引用网上的],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文件;
```javscript
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)`
```javascript
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' });

1. 事件监听 error,exit,close,disconnect,message
2. child.stdin,child.stderr,child.stdout,child.pid//属性值子进程的PID,child.kill,child.send,child.unref() //阻止父进程等待一个给出的子进程

未完待续,如有指点,望不吝赐教!

child_process 子进程的更多相关文章

  1. node.js中process进程的概念和child_process子进程模块的使用

    进程,你可以把它理解成一个正在运行的程序.node.js中每个应用程序都是进程类的实例对象. node.js中有一个 process 全局对象,通过它我们可以获取,运行该程序的用户,环境变量等信息. ...

  2. Node.js 手册查询-1-核心模块方法

    Node.js 学习手册 标签(空格分隔): node.js 模块 核心模块 核心模块是被编译成二进制代码,引用的时候只需require表示符即可 os 系统基本信息 os模块可提供操作系统的一些基本 ...

  3. 读书笔记: nodejs API 参考

    >> bufferBuffer对象是全局对象Buffer支持的编码方式:ascii, utf8, base64, binarynew Buffer(size)new Buffer(arra ...

  4. node.js系列笔记之node.js初识《一》

    node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...

  5. 使用JS开发桌面端应用程序NW.js-3-开发问题小记

    前言 因为我们的项目是2C的,而XP系统是最大的用户量占比,所以只能使用nw开发而不能用Electron,本文谨记开发nw过程中遇到的各种问题以及解决方案. nw.Window.open打开新窗口不能 ...

  6. 理解Node.js安装及模块化

    1.安装Node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.j ...

  7. Node+GitLab实现小程序CI系统

    为什么要实现自动部署 小程序开发迭代里,有以下几个个头痛的问题, 如何准确并快速的的把小程序上传去后台,并让测试人员进行测试? 测试同事找开发要二维码,效率较低 本地生成的二维码会出现携带本地代码.未 ...

  8. NodeJs中require use get typescript及其他知识点集合

    NodeJs的Express使用 nodejs事件的监听与事件的触发 TypeScript学习笔记 深入浅出Node.js Nodejs开发Office插件 类百度文库文档上传.转换和展示功能项目开源 ...

  9. Nodejs 文档概览

    Node.js v8.11.1 Node.js v8.11.1 文档 今天大致浏览了一下Node.js的官方文档,走马观花的了解了大部分模块的api,对他们的使用场景做一个简单的笔记 assert 断 ...

随机推荐

  1. C++11 带来的新特性 (2)—— 统一初始化(Uniform Initialization)

    1 统一初始化(Uniform Initialization) 在C++ 11之前,所有对象的初始化方式是不同的,经常让写代码的我们感到困惑.C++ 11努力创造一个统一的初始化方式. 其语法是使用{ ...

  2. Linux内核优化

     相信做运维的同仁,进行运维环境初建时,必须要考虑到操作系统内核参数的优化问题,本人经历数次的运维环境重建后,决定要自行收集一份比较完善的系统内核参数优化说明文件出来,于是就有了下文,本文当前值是官方 ...

  3. fiddler安装 与 https

    1.下载最新版fiddler ,强烈建议在官网下载:https://www.telerik.com/download/fiddler 2. 正常傻瓜式安装,下一步,下一步,安装完毕后,先不用急于打开软 ...

  4. CSS空心圆

    CSS代码:改变border的大小控制空心的大小 div { width: 100px; height: 100px; background: #ffffff; border-radius: 50%; ...

  5. LocalDate、LocalDateTime、LocalTime开发小结

    在我之前的文章<[整理]Java 8新特性总结 >中有提到Date/Time API (JSR 310)对日期与时间的处理.它将服务端对时间的处理进行了统一,使得对时间的处理更加规范和统一 ...

  6. 无代理处理post非简单请求跨域问题

    express下 在处理纯http服务post请求的时候的跨域问题 即使在服务端先加入 Access-Control-Allow-Origin: *(get即时有效) 会出现 Failed to lo ...

  7. linux的软件安装方式总结

    Linux系统中软件的“四”种安装原理详解:源码包安装.RPM二进制安装.YUM在线安装.脚本安装包   一.Linux软件包分类 1.1 源码包 优点: 开源,如果有足够的能力,可以修改源代码: 可 ...

  8. node07

    ---恢复内容开始--- 1.SQL基本查询语句 2.子句 1)WHERE 子句 WHERE key=val WHERE key>val WHERE key1>val1 AND key2& ...

  9. 什么是 ajax?----异步 javascript 和 xml

    GET 用于请求服务器数据 POST 用于上传数据到服务器,或者修改服务器数据 ajax 异步通信,实现页面的局部刷新,按需获取数据,节约带宽,带来更好的用户体验 客户端与服务器在不必刷新浏览器的情况 ...

  10. AtiveMQ初次连接的 http error:503 连接错误 Prolem accessing /.Reason : Service Unavailable

    503错误 说明是服务器内部的错误了 这是 为什么嫩  这是因为你的Linux虚拟机(我用的是centos版本的)的机器名 和 你的 ip地址的映射关系 不一致  导致访问失败 查看机器名的地址:ca ...