近期文章:
- 浅谈微前端沙箱机制
- 实现篇:手把手打造一个番茄时钟
- Vue3响应式原理那些事
- 实现篇:二叉树遍历收藏版
- Vue3开发常见性能问题知多少
- Vue3组件常见通信方式你了解多少?
- 实现篇:LRU算法的几种实现
- 从底层视角看requestAnimationFrame的性能增强
- Nginx Upstream了解一下
- 实现篇:一文搞懂Promise是如何实现的
- 一文搞懂 Markdown 文档规则
Nodejs开发过程中,进程通信常常出现,本篇就尝试介绍一下常见通信方式。
1 什么是子进程?
在 Node.js 中,子进程是指通过主 Node.js 进程创建的独立进程。它们可以运行系统命令(如 ls
、git
等)或其他脚本(如 Python、Shell 脚本等)。主进程和子进程之间可以通过标准输入输出(stdin、stdout、stderr)或 IPC(进程间通信)进行数据交换。
child_process
模块提供了以下主要方法来创建子进程:
spawn()
:异步创建子进程,适合需要持续输出或流式处理的任务。exec()
:异步创建子进程,适合执行一次性命令并获取完整输出。execFile()
:类似于exec()
,但直接执行文件,适合执行二进制文件。fork()
:专门用于创建 Node.js 子进程,适合运行其他 Node.js 脚本。
2 核心方法详解
2.1 child_process.spawn(command, [args], [options])
- 功能:异步创建子进程,执行命令,并以流的方式处理输入输出。
- 参数:
command
:要执行的命令(字符串,例如'ls'
)。args
:命令的参数(数组,例如['-l', '-a']
)。options
:配置对象,例如:cwd
:子进程的工作目录。env
:环境变量。shell
:是否通过 shell 执行(默认false
)。
- 返回值:返回一个
ChildProcess
实例。 - 特点:
- 适合处理大输出或需要实时处理流的任务(如视频处理、日志流)。
- 不会缓存输出,数据通过
stdout
和stderr
流返回。
示例:
const {
spawn } = require('child_process');
// 执行 `ls -la` 命令
const ls = spawn('ls', ['-la']);
ls.stdout.on('data', (data) => {
console.log(`输出:${
data}`);
});
ls.stderr.on('data', (data) => {
console.error(`错误:${
data}`);
});
ls.on('close', (code