Skip to content

说说对 node 子进程的了解

Posted on:2024年8月16日 at 12:21

Node.js 的子进程模块允许你创建和管理子进程,以便执行系统命令、运行脚本或处理后台任务。子进程的使用场景包括处理大量计算任务、执行外部命令、并行处理等。Node.js 提供了 child_process 模块来支持这些功能。以下是对 Node.js 子进程的详细了解:

1. 子进程模块(child_process

Node.js 的 child_process 模块提供了几种创建子进程的方法:

2. 使用示例

2.1 exec

exec 适合用于执行简单的系统命令并获取结果:

const { exec } = require("child_process");

exec("ls -l", (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.error(`stderr: ${stderr}`);
});

2.2 execFile

execFile 直接运行指定的文件:

const { execFile } = require("child_process");

execFile("node", ["--version"], (error, stdout, stderr) => {
  if (error) {
    console.error(`execFile error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.error(`stderr: ${stderr}`);
});

2.3 spawn

spawn 启动一个新进程,并且可以处理流数据:

const { spawn } = require("child_process");

const ls = spawn("ls", ["-l"]);

ls.stdout.on("data", (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on("data", (data) => {
  console.error(`stderr: ${data}`);
});

ls.on("close", (code) => {
  console.log(`child process exited with code ${code}`);
});

2.4 fork

fork 创建一个新的 Node.js 子进程,并且可以通过 IPC 通信:

父进程(parent.js)

const { fork } = require("child_process");

const child = fork("./child.js");

child.on("message", (message) => {
  console.log(`Received message from child: ${message}`);
});

child.send("Hello from parent");

子进程(child.js)

process.on("message", (message) => {
  console.log(`Received message from parent: ${message}`);
  process.send("Hello from child");
});

3. 子进程与父进程的通信

4. 注意事项

通过以上功能,Node.js 的子进程模块能够帮助开发者在 Node.js 环境中实现并行处理和系统命令执行等功能,从而提升应用的处理能力和性能。

原文转自:https://fe.ecool.fun/topic/39dd7754-b0b1-430b-af99-da5e30a9b26a