Node.jsSubProcess模块

Node.jsSubProcess模块 首页 / Node.js入门教程 / Node.jsSubProcess模块

Node.js子进程模块提供了以类似于popen(3)的方式生成子进程的函数。

创建子进程的主要方法有三种:

  • child_process.exec()       -  此方法在控制台中运行命令并缓冲输出。
  • child_process.spawn()   -  此方法使用给定命令启动新进程。
  • child_process.fork()       - 此方法是spawn()方法创建子进程的特例。

child_process.exec()

child_process.exec()方法在控制台中运行命令并缓冲输出。

语法:

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

参数:

1)command   -  它使用空格分隔的参数指定要运行的命令。

2)options       -  它可能包含以下一个或多个选项:

  • cwd                   -  它指定子进程的当前工作目录。
  • env                     -  它指定环境键值对。
  • encoding         -  String字符串(默认值:'utf8')
  • Shell                 -  它指定字符串Shell来执行命令(默认值:在UNIX上为'/bin/sh',在Windows上为'cmd.exe')
  • timeout           -   Number(默认值:0)
  • maxBuffer     -   Number(默认值:200 * 1024)
  • killSignal       -  String字符串(默认值:'SIGTERM')
  • uid Number -  设置进程的用户身份。
  • gid Number -  设置进程的组标识。

Callback         -  回调函数指定三个参数error,stdout和stderr,当进程终止时,将使用以下输出调用该参数。

child_process.exec()示例1

让无涯教程看一个简单的流程示例,以打印流程的体系结构,pid,平台和版本。

文件: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 child process example 1

它也会创建一个新目录。

Node.js child process example 2

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命令提示符并运行以下代码:

链接:https://www.learnfk.comhttps://www.learnfk.com/nodejs/nodejs-child-process.html

来源:LearnFk无涯教程网

node master.js
Node.js child process exec() example 1

child_process.spawn()

child_process.spawn()方法使用给定命令启动新进程。此方法返回流(stdout和stderr),通常在进程返回大量数据时使用。

语法:

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

参数:

1)command     - 它指定要运行的命令。

2)args             - 它指定字符串参数的数组列表。

3)options         - 它可能包含以下选项中的一个或多个:

  • cwd                               -  它指定子进程的当前工作目录。
  • env                               -  它指定环境键值对。
  • stdio                             -  array |string  stdio配置
  • customFds                 -  stdio的文件描述符,不推荐使用
  • detached Boolean   - 成为进程组长
  • uid Number               - 设置进程的用户身份。
  • gid Number               - 设置进程的组标识。

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命令提示符并运行以下代码:

链接:https://www.learnfk.comhttps://www.learnfk.com/nodejs/nodejs-child-process.html

来源:LearnFk无涯教程网

node master.js
Node.js child process spawn() example 1

child_process.fork()

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

语法:

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

参数:

1)modulePath   -  这是一个字符串,指定要在子进程中运行的模块。

2)args               -  它指定字符串参数的数组列表。

3)options           -  它可能包含以下选项中的一个或多个:

  • cwd                   -  它指定子进程的当前工作目录。
  • env                     - 指定环境键值对。
  • execPath         -  这是一个字符串可执行文件,用于创建子进程。
  • execArgv         -  它指定传递给可执行文件的字符串参数的数组列表(默认值:process.execargv)。
  • silent                 -  它指定boolean如果是true,stdin,stdout和stderr的子进程将被送到父级,否则它们将从父进程中继承,
  • uid Number   -   设置进程的用户身份。
  • gid Number   -  设置进程的组标识。

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命令提示符并运行以下代码:

链接:https://www.learnfk.comhttps://www.learnfk.com/nodejs/nodejs-child-process.html

来源:LearnFk无涯教程网

node master.js
Node.js child process fork() example 1

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

教程推荐

云时代的JVM原理与实战 -〔康杨〕

深入拆解消息队列47讲 -〔许文强〕

大厂广告产品心法 -〔郭谊〕

Spring Cloud 微服务项目实战 -〔姚秋辰(姚半仙)〕

手把手带你搭建秒杀系统 -〔佘志东〕

说透芯片 -〔邵巍〕

深度学习推荐系统实战 -〔王喆〕

WebAssembly入门课 -〔于航〕

数据结构与算法之美 -〔王争〕

好记忆不如烂笔头。留下您的足迹吧 :)