具体用法参考官方文档即可,已经写的很清楚。本文仅做一些简单对比。

简单对比

方法 spawn fork exec execFile
是否通过 shell 执行子命令 否(*) 否(*)
读取程序输出 利用子进程的 stdout / stderr 利用子进程的 stdout / stderr 在 callback 中一次返回 在 callback 中一次返回
父子进程通信 process.send()process.on("message") (仅当子进程为 Node 脚本时可用) process.send()process.on("message") 不支持 不支持
备注 仅限执行 Node 脚本

说明

  1. forkexecexecFile 都是 spawn 的一种特殊情况,内部都是调用了 spawn 方法。
  2. spwanexecFile 默认是创建子进程直接执行指定命令,但是可以通过 option 中的 shell 字段来明确要求在一个 shell 中执行命令。
  3. 由于 execexecFile 会把子进程的 stdout 和 stderr 缓存起来一次性返回给调用方,在子进程退出之前,这些缓存数据会在内存中不断累积。为了防止内存占用过多导致的问题,这两个方法的参数对象中接受一个 maxBuffer 字段,表示缓存数据的上限大小,超过该大小会导致子进程被 kill() 且缓存数据会被截断。该参数的默认值是 1024 * 1024
  4. 以上几个方法的源码都在 lib/child_process.js 中可以找到。