📘 前言
在 Node.js 中,child_process 模块提供了多种创建与管理子进程的方式。
通过这些方法,我们可以在 Node 环境中执行外部命令、运行其他脚本、或与原生程序(如 C/C++ DLL、Python、Shell 等)交互。
在 Electron 开发中,这一机制尤其常见:
比如调用 DLL 接口、启动后台服务、捕获外部日志、或让主进程与辅助模块协同工作。
我们之前在Electron中使用koffi调用DLL的时候,后来就把相关功能代码全部移动到了子进程中去。
本文将系统讲解:
- Node.js 创建子进程的几种方式;
- 各自的参数含义;
stdio的深入机制与在 Electron 中的实战意义;- 并配有完整、可直接运行的示例代码。
📚 目录
- 何时用哪一种方式?
- spawn:流式执行命令
- exec:缓冲输出的便捷命令执行
- execFile:直接执行可执行文件(更安全)
- fork:Node 专用子进程 + IPC 通信
- 同步版本 API
- options 参数详解
- stdio 深入讲解
- Electron 中捕获 DLL 输出的方案
- 实战示例合集
- 总结与常见陷阱
1️⃣ 何时用哪一种方式?
| 方法 | 是否走 Shell | 输出形式 | 适合场景 |
|---|---|---|---|
spawn |
❌ | 流式(stdout/stderr) |
长时间运行或输出较多的命令 |
exec |
✅ | 一次性缓冲 | 快速执行小命令 |
execFile |
❌ | 一次性缓冲 | 直接执行文件,更安全 |
fork |
❌ | 双向消息(IPC) | 启动 Node 子模块并通信 |
2️⃣ spawn:流式执行命令
spawn 用于持续接收输出流的任务,例如日志流、子服务或长任务。
const {
spawn } = require('child_process');
const ls = spawn('ls', ['-la', '/usr']); // Windows 下用 dir /s /b 需加 shell:true
ls.stdout.on('data', data => console.log('stdout:', data.toString()));
ls.stderr.on('data', data => console.error('stderr:', data.toString()));
ls.on('close', code => console.log('process exited with code', code));
特点:
- 输出为 流(Stream);
- 不经过 shell;
- 适合持续性任务。
3️⃣ exec:缓冲输出的便捷命令执行
exec 会启动 shell,并将整个命令输出一次性返回给回调。
const {
exec } = require('child_process');
exec('ls -la /usr',

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



