Node.js Child Process

2024 年 8 月 29 日 | 4 分钟阅读

Node.js child_process 模块提供了类似于 popen(3) 的方式来创建子进程。

创建子进程有三种主要方式

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

Node.js child_process.exec() 方法

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

语法

参数

1) command: 指定要运行的命令,带空格分隔的参数。

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

  • cwd: 指定子进程的当前工作目录。
  • env: 指定环境变量键值对。
  • encoding: 字符串 (默认值: 'utf8')
  • shell: 指定执行命令的 shell 字符串 (在 UNIX 上默认为 '/bin/sh',在 Windows 上默认为 'cmd.exe'。shell 应理解在 UNIX 上的 -c 开关或在 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

创建一个名为 my.bat 的批处理文件,其中包含以下代码

文件: my.bat

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

它将执行两个命令:dirmkdir child。dir 命令将显示当前目录的列表,mkdir 命令将创建一个新目录。对于 Linux,您可以使用 ls 命令显示当前目录列表。

Node.js child process example 1

它还将创建一个新目录。

Node.js child process example 2

Node.js child_process.exec() 示例 2

创建两个名为 support.js 和 master.js 的 js 文件,其中包含以下代码

文件: support.js

文件: master.js

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

Node.js child process exec() example 1

Node.js child_process.spawn() 方法

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

语法

参数

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

2) args: 指定一个字符串参数数组列表。

3) options: 可以包含一个或多个以下选项

  • cwd: 指定子进程的当前工作目录。
  • env: 指定环境变量键值对。
  • stdio: 数组|字符串 子进程的 stdio 配置
  • customFds: 数组 已弃用的文件描述符供子进程用于 stdio
  • detached Boolean : 子进程将成为进程组的 leader
  • uid Number: 设置进程的用户身份。
  • gid Number: 设置进程的组身份。

Node.js child_process.spawn() 示例

创建两个名为 support.js 和 master.js 的 js 文件,其中包含以下代码

文件: support.js

文件: master.js

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

Node.js child process spawn() example 1

Node.js child_process.fork() 方法

child_process.fork 方法是 spawn() 方法创建 Node 进程的一种特殊情况。此方法返回一个对象,该对象除了拥有普通 ChildProcess 实例的所有方法外,还内置了一个通信通道。

语法

参数

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

2) args: 指定一个字符串参数数组列表。

3) options: 可以包含一个或多个以下选项

  • cwd: 指定子进程的当前工作目录。
  • env: 指定环境变量键值对。
  • execPath: 这是一个字符串,用于创建子进程的可执行文件。
  • execArgv: 指定传递给可执行文件的字符串参数数组列表 (默认值: process.execArgv)。
  • silent: 指定布尔值,如果为 true,子进程的标准输入、输出和错误将被传给父进程,否则它们将从父进程继承,有关 spawn() 的 stdio 的 "pipe" 和 "inherit" 选项的更多详细信息,请参阅 (默认为 false)。
  • uid Number: 设置进程的用户身份。
  • gid Number: 设置进程的组身份。

Node.js child_process.fork() 示例

创建两个名为 support.js 和 master.js 的 js 文件,其中包含以下代码

文件: support.js

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

Node.js child process fork() example 1
下一个主题Node.js Buffer