Node.js 子进程完全指南:从 spawn 到 fork,深入理解 stdio 与 Electron 中的 DLL 输出捕获

📘 前言

在 Node.js 中,child_process 模块提供了多种创建与管理子进程的方式。
通过这些方法,我们可以在 Node 环境中执行外部命令、运行其他脚本、或与原生程序(如 C/C++ DLL、Python、Shell 等)交互。

在 Electron 开发中,这一机制尤其常见:
比如调用 DLL 接口、启动后台服务、捕获外部日志、或让主进程与辅助模块协同工作。

我们之前在Electron中使用koffi调用DLL的时候,后来就把相关功能代码全部移动到了子进程中去。

本文将系统讲解:

  • Node.js 创建子进程的几种方式;
  • 各自的参数含义;
  • stdio 的深入机制与在 Electron 中的实战意义
  • 并配有完整、可直接运行的示例代码。

📚 目录

  1. 何时用哪一种方式?
  2. spawn:流式执行命令
  3. exec:缓冲输出的便捷命令执行
  4. execFile:直接执行可执行文件(更安全)
  5. fork:Node 专用子进程 + IPC 通信
  6. 同步版本 API
  7. options 参数详解
  8. stdio 深入讲解
  9. Electron 中捕获 DLL 输出的方案
  10. 实战示例合集
  11. 总结与常见陷阱

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',
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光芒万丈向远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值