Node.js中那些常用的进程通信方式
文章目录
- 1 什么是子进程?
- 2 核心方法详解
- 2.1 `child_process.spawn(command, [args], [options])`
- 2.2 `child_process.exec(command, [options], callback)`
- 2.3 `child_process.execFile(file, [args], [options], callback)`
- 2.4 `child_process.fork(modulePath, [args], [options])`
- 3 `ChildProcess` 实例的属性和事件
- 4 同步方法
- 5 使用场景和注意事项
- 5.1 使用场景
- 5.2 注意事项
- 6 实际案例
- 案例 1:实时日志输出
- 案例 2:父子进程通信
- 7 总结
近期文章:
- 浅谈微前端沙箱机制
- 实现篇:手把手打造一个番茄时钟
- 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