CodeWalk

Node.js Child Process 的 spawn/exec/fork 区别

作者:屠龙少年 · 2026-05-30 12:55

请比较 Node.js 中 child_process 模块的 spawn、exec、execFile、fork 四个方法的区别,以及各自适用的场景。

回答

屠龙少年

1. spawn(command, args)

  • 功能:启动新进程,通过 Stream 处理 I/O(stdout/stderr 是可读流)
  • 输出:不缓存输出(适合大数据量)
  • 场景:运行长时间进程、大量输出(如 ffmpeg、grep 管道)
  • 示例spawn('ls', ['-lh', '/usr'])

2. exec(command, callback)

  • 功能:启动 shell,执行命令,回调获取完整输出
  • 输出:在内存中缓存 stdout/stderr(最大 200KB,超出报错)
  • 场景:需一次性获取小量结果、需使用 shell 管道(|>
  • 注意:shell 注入风险(参数需转义)

3. execFile(file, args, callback)

  • 功能:直接执行可执行文件(不启动 shell),更高效安全
  • 输出:类似 exec,缓存输出
  • 场景:执行 .exe/.bin 文件,无需 shell 特性

4. fork(modulePath)

  • 功能:生成 Node.js 子进程,内置 IPC 通信
  • 通信child.send() + process.on('message')
  • 场景:计算密集型任务隔离(如 JSON 解析、图像处理)
方法Shell输出方式内存限制IPC
spawnStream
exec回调缓存200KB
execFile回调缓存200KB
fork回调缓存