child_process  模块提供了衍生子进程的能力

异步方式:spawn、exec、execFile、fork
同步方式:spawnSync、execSync、execFileSync

说明:

.exec()、.execFile()、.fork() 底层都是通过 .spawn() 实现的
.exec()、execFile() 还提供了回调,当子进程停止的时候执行
.spawnSync()是 .spawn()的同步版  ,将会阻塞 Node.js 事件循环
.execSync() 是 .exec()  的同步版本,将会阻塞 Node.js 事件循环
.execFileSync() 是 .execFile() 的同步版本,将会阻塞 Node.js 事件循环

(1) spawn

使用指定的命令行参数创建新进程

child_process.spawn(command[, args][, options])

command: 要执行的指令
args: Array字符串参数数组
options: 配置项

(2) exec

创建子shell,可以直接执行shell管道命令,有回调

只适用于命令执行结果数据小的情况

child_process.exec(command[, options][, callback])

command: 要执行的指令

options: 配置项

callback:回调

"use strict";
var path = require("path"),
execFile = require("child_process").exec,
fs = require('fs'); module.exports = function convert(source, dest, options) { return new Promise(function(resolve, reject) { var convertPath; if (options && options.path) {
convertPath = options.path + '/Convert';
} else {
convertPath = 'Convert';
} if (!fs.existsSync(source)) {
reject('Unable to open the source file.');
return;
} var args = [source, dest];
if (options && options.args) {
args = args.concat(options.args);
} var cmd = convertPath+" "+args.join(" "); execFile(cmd, function(err, stdout, stderr) {
if (err) {
reject(err);
} else if (stderr.lenght > 0) {
reject(new Error(stderr.toString()));
} else {
resolve();
}
});
});
};

(3)execFile

用于执行文件,不会创建子shell环境

child_process.execFile(file[, args][, options][, callback])

file:要运行的可执行文件的名称或路径

args:字符串参数的列表

options:配置项

callback:回调

exec() 、execFile() 区别:

  是否创建了shell

"use strict";

var path = require("path"),
execFile = require("child_process").execFile,
fs = require('fs'); module.exports = function convert(source, dest, options) { return new Promise(function(resolve, reject) { var convertPath; if (options && options.path) {
convertPath = options.path + '/Convert';
} else {
convertPath = 'Convert';
} if (!fs.existsSync(source)) {
reject('Unable to open the source file.');
return;
} var args = [source, dest]; //If user supplies any args concat them to the args array
if (options && options.args) {
args = args.concat(options.args);
} execFile(convertPath, args, {
maxBuffer: 1024 * 2000
}, function(err, stdout, stderr) { if (err) {
reject(err);
} else if (stderr.lenght > 0) {
reject(new Error(stderr.toString()));
} else {
resolve();
}
});
});
};

(4)fork

spawn方法的一个特例,fork用于执行js文件创建Node.js子进程

fork方式创建的子进程与父进程之间建立了IPC通信管道

常用于父子进程的通信

child_process.fork(modulePath[, args][, options])

modulePath:要在子进程中运行的模块

args:参数

options:配置

nodejs的child_process的更多相关文章

  1. nodejs的child_process同步异步

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

  2. NodeJs之child_process

    一.child_process child_process是NodeJs的重要模块.帮助我们创建多进程任务,更好的利用了计算机的多核性能. 当然也支持线程间的通信. 二.child_process的几 ...

  3. nodejs(二)child_process模块

    1.child_process是Node.js的一个十分重要的模块,通过它可以实现创建多进程,以利用多核计算资源. child_process模块提供了四个创建子进程的函数,分别是spawn,exec ...

  4. Nodejs进阶:如何玩转子进程(child_process)

    本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 在node中,child_process这个模 ...

  5. NodeJS学习笔记 (16)子进程-child_process(ok)

    原文: https://github.com/chyingp/nodejs-learning-guide/blob/master/README.md 自己的跟进学习: 父进程,子进程,线程之间的关系 ...

  6. Nodejs密集型CPU解决方案

    首先说一下nodejs单线程的优势: 高性能,与php相比,避免了频繁创建切换线程的开销,执行更加迅速,资源占用小. 线程安全,不用担心同一变量被多线程读写,造成程序崩溃. 单线程的异步和非阻塞,其实 ...

  7. nodejs顺序执行shell

    最近工作中需要用到nodejs编写脚本来顺序执行自动化测试用例,编写代码如下: var runCommand = function (command){ child_process.exec(comm ...

  8. 搭建前端私有npm杂记

    随着前端队伍越来越壮大,项目间共享代码就变得尤为重要.常用的框架/类库没必要在每个项目都放一份,团队内部产出的公共模块也需要有合理的共享机制.现在,用npm管理前端代码已经是业界趋势.楼主尝试用私有n ...

  9. 【Grunt】关于Grunt可视化的尝试

    使用Grunt遇到的问题? 必须要安装NodeJS 必须安装grunt-cli 需要编写复杂的Gruntfile.js规则 每个项目中必须存在nodejs的grunt模块 不方便管理每一个包含grun ...

随机推荐

  1. Mybatis中的Mapper.xml映射文件sql查询接收多个参数

    ​ 我们都知道,在Mybatis中的Mapper.xml映射文件可以定制动态SQL,在dao层定义的接口中定义的参数传到xml文件中之后,在查询之前mybatis会对其进行动态解析,通常使用#{}接收 ...

  2. 【Maven】【IDEA】在idea中开发web项目,解决maven的jar包冲突的方法

    在idea中开发web项目,解决maven的jar包冲突的方法 第一步: 先对项目进行 clean ,再进行install 第二步: 出现NoSuchMethodException,ClassNotF ...

  3. C#通过PInvoke调用c++函数的备忘录

    目前知道的情况被调用的C/C++函数只能是全局函数 不能调用类中的成员方法 被调用的C函数必须使用extern “C“包含,保证采用的导出函数名生成规则和.NET一致 函数调用约定通常使用WINAPI ...

  4. jmeter入门操作 = 录制

    没安装工具的朋友请先看:https://www.cnblogs.com/cainiaoxiansheng/p/11007754.html 软件装好,功能了解好,那么就开始进入正题,先来一波录制 不要鄙 ...

  5. Java面向对象——三大特性

    Java面向对象——三大特性 摘要:本文主要介绍了面型对象的三大特性. 封装 什么是封装 封装,就是指一个类隐藏了对象的属性和实现细节,对自己的数据和方法进行访问权限控制,只允许某些类和对象进行访问和 ...

  6. Java生鲜电商平台-服务器部署设计与架构

    Java生鲜电商平台-服务器部署设计与架构 补充说明:Java开源生鲜电商平台-服务器部署设计与架构,指的是通过服务器正式上线整个项目,进行正式的运营. 回顾整个章节,我们涉及到以下几个方面: 1. ...

  7. java基本程序设计结构总结

    学习一门语言:(1)掌握它的表现形式(2)这些语言什么应用. 1.1关键字 1.关键字是被赋予了特殊含义的单词. 2.关键字特点:关键字所有字母都小写. 3.类名的每一个单词开头必须大写. 1.2标识 ...

  8. Windows+Qt使用gRPC

    上篇文章<Windows+VS2017使用gRPC>编译出了Windows下可用的gRPC静态lib库文件,在此基础上要想在Qt上使用,需要使用MSVC2017 64bit构建组件进行构建 ...

  9. Spring登录实例

    Spring登录实例 项目结构 首先看一下整个项目的目录结构,如下: 导入Jar包 工欲善必先利其器,导入一下Jar包 配置文件 web.xml 配置 web.xml配置文件,如下: xmlns:xs ...

  10. 【AI测试】也许这有你想知道的人工智能 (AI) 测试--开篇

    人工智能测试 什么是人工智能,人工智能是怎么测试的.可能是大家一开始最想了解的. 大家看图中关于人工智能的定义.通俗点来说呢,就是 让机器实现原来只有人类才能完成的任务:比如看懂照片,听懂说话,思考等 ...