Node.js子进程解析

本文概述

  • Node.js child_process.exec()方法
  • Node.js child_process.exec()示例1
  • Node.js child_process.exec()示例2
  • Node.js child_process.spawn()方法
  • Node.js child_process.spawn()示例
  • Node.js child_process.fork()方法
  • Node.js child_process.fork()示例
Node.js子进程模块提供了以类似于popen(3)的方式生成子进程的功能。
创建子进程的三种主要方法:
  • child_process.exec()方法:此方法在控制台中运行命令并缓冲输出。
  • child_process.spawn()方法:此方法使用给定命令启动新进程。
  • child_process.fork()方法:该方法是spawn()方法创建子进程的特例。
Node.js child_process.exec()方法 child_process.exec()方法在控制台中运行命令并缓冲输出。
句法:
child_process.exec(command[, options], callback)

参数:
1)命令:使用空格分隔的参数指定要运行的命令。
2)选项:它可能包含以下一个或多个选项:
  • cwd:指定子进程的当前工作目录。
  • env:指定环境键值对。
  • 编码:字符串(默认:’ utf8′ )
  • shell:它指定字符串Shell执行命令(默认值:在UNIX上为’ / bin / sh’ , 在Windows上为’ cmd.exe’ , 该Shell应该理解UNIX上的-c开关或Windows上的/ s / c。 Windows, 命令行解析应与cmd.exe兼容。)
  • 超时:数字(默认值:0)
  • maxBuffer:Number(默认:200 * 1024)
  • killSignal:字符串(默认:’ SIGTERM’ )
  • uid数字:设置进程的用户身份。
  • gid Number:设置进程的组标识。
callback:回调函数指定三个参数error, stdout和stderr, 当进程终止时, 将使用以下输出调用它们。
Node.js child_process.exec()示例1 让我们看一个简单的流程示例, 以打印流程的体系结构, pid, 平台和版本。
【Node.js子进程解析】档案:child_process_example1.js
const exec = require('child_process').exec; exec('my.bat', (err, stdout, stderr) => { if (err) { console.error(err); return; } console.log(stdout); });

使用以下代码创建一个名为my.bat的批处理文件:
文件:my.bat
dir mkdir child

打开Node.js命令提示符并运行以下代码:
node child_process_example1.js

它将执行两个命令dir和mkdir child。 dir命令将显示当前目录的列表, 而mkdir命令将创建一个新目录。对于linux, 可以使用ls命令显示当前目录列表。
Node.js子进程解析

文章图片
还将创建一个新目录。
Node.js子进程解析

文章图片
Node.js child_process.exec()示例2 创建两个名为support.js和master.js的js文件, 其代码如下:
文件:support.js
console.log("Child Process " + process.argv[2] + " executed." );

档案:master.js
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i< 3; i++) { var workerProcess = child_process.exec('node support.js '+i, function (error, stdout, stderr) { if (error) { console.log(error.stack); console.log('Error code: '+error.code); console.log('Signal received: '+error.signal); } console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); }); workerProcess.on('exit', function (code) { console.log('Child process exited with exit code '+code); }); }

打开Node.js命令提示符并运行以下代码:
node master.js

Node.js子进程解析

文章图片
Node.js child_process.spawn()方法 child_process.spawn()方法使用给定命令启动新进程。此方法返回流(stdout和stderr), 通常在进程返回大量数据时使用。
句法:
child_process.spawn(command[, args][, options])

参数:
1)命令:指定要运行的命令。
2)args:它指定字符串参数的数组列表。
3)选项:它可能包含以下一个或多个选项:
  • cwd:指定子进程的当前工作目录。
  • env:指定环境键值对。
  • stdio:Array | String子级的stdio配置
  • customFds:子代用于stdio的数组弃用文件描述符
  • 分离布尔值:子级将成为流程组负责人
  • uid数字:设置进程的用户身份。
  • gid Number:设置进程的组标识。
Node.js child_process.spawn()示例 创建两个名为support.js和master.js的js文件, 其代码如下:
文件:support.js
console.log("Child Process " + process.argv[2] + " executed." );

档案:master.js
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i< 3; i++) { var workerProcess = child_process.spawn('node', ['support.js', i]); workerProcess.stdout.on('data', function (data) { console.log('stdout: ' + data); }); workerProcess.stderr.on('data', function (data) { console.log('stderr: ' + data); }); workerProcess.on('close', function (code) { console.log('child process exited with code ' + code); }); }

打开Node.js命令提示符并运行以下代码:
node master.js

Node.js子进程解析

文章图片
Node.js child_process.fork()方法 child_process.fork方法是spawn()创建Node进程的一种特殊情况。除了将所有方法都包含在常规ChildProcess实例中之外, 此方法还通过内置的通信通道返回对象。
句法:
child_process.fork(modulePath[, args][, options])

参数:
1)modulePath:这是一个字符串, 指定要在子代中运行的模块。
2)args:它指定字符串参数的数组列表。
3)选项:它可能包含以下一个或多个选项:
  • cwd:指定子进程的当前工作目录。
  • env:指定环境键值对。
  • execPath:这是用于创建子进程的字符串Executable。
  • execArgv:它指定传递给可执行文件的字符串参数的数组列表(默认值:process.execArgv)。
  • silent:它指定布尔值如果为true, 则将子级的stdin, stdout和stderr通过管道传递给父级, 否则它们将从父级继承, 请参见spawn()的stdio的” pipe” 和” inherit” 选项有关更多详细信息(默认为false)。
  • uid数字:设置进程的用户身份。
  • gid Number:设置进程的组标识。
Node.js child_process.fork()示例 创建两个名为support.js和master.js的js文件, 其代码如下:
文件:support.js
const fs = require('fs'); const child_process = require('child_process'); for(var i=0; i< 3; i++) { var worker_process = child_process.fork("support.js", [i]); worker_process.on('close', function (code) { console.log('child process exited with code ' + code); }); }

打开Node.js命令提示符并运行以下代码:
node master.js

Node.js子进程解析

文章图片

    推荐阅读