Nodejs教程
Nodejs Mysql
Nodejs MongoDB
Nodejs 对比

Node.js 子进程

Node.js子进程

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)command: 使用空格分隔的参数指定要运行的命令。
2)options: 可以包含以下一个或多个选项:
cwd: 它指定子进程的当前工作目录。 env:它指定环境键值对。 encoding: 字符串(默认值: 'utf8') shell: 它指定字符串Shell执行命令(默认值: UNIX上为"/bin/sh",Windows上为" cmd.exe",该外壳程序应了解-c开关) UNIX或Windows上的/s/c。在Windows上,命令行解析应与cmd.exe兼容。) timeout: 编号(默认值: 0) maxBuffer: 编号(默认值: 200 * 1024) killSignal: 字符串(默认值: 'SIGTERM') uid Number: 设置进程的用户身份。 gid Number: 设置进程的组标识。
callback: 回调函数指定三个参数error,stdout和stderr,当进程终止时将使用以下输出来调用它们。

Node.js 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子进程示例1
它还将创建一个新目录。
Node.js子进程示例2

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子进程exec()示例1

Node.js 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 Child的stdio配置 customFds: 供孩子用于stdio的数组弃用文件描述符 detached Boolean: 子级将成为流程组负责人 uid Number: 设置进程的用户身份。 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子进程spawn()示例1

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)。 沉默: 它指定布尔值如果为true,则将孩子的stdin,stdout和stderr通过管道传递给父级,否则它们将从父级继承,请参见"管道"和"有关更多详细信息,请使用spawn()的stdio的"继承"选项(默认为false)。 uid号: : 设置进程的用户身份。 用户名: 设置进程的组标识。

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子进程fork()示例1
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4