child_process 提供四种创建方式:exec 与 execFile 执行系统命令并收集输出;spawn 以流的方式处理大量输出;fork 专门建立可双向通信的 Node 子进程。execSync 等同步变体会阻塞事件循环,只应该用在构建脚本等启动阶段。
spawn 与 exec 的区别在于输出处理:exec 把标准输出缓冲成字符串在结束时一次性回调,适合体量小的命令;spawn 以流的形式逐块产出,适合视频转码这种输出巨大的场景。fork 返回的子进程自带 IPC 通道,父子进程可以用 send 方法互相收发消息。
const { exec, spawn } = require('child_process'); // 收集式执行:适合输出小的命令 exec('git rev-parse --abbrev-ref HEAD', (err, stdout) => { if (err) throw err; console.log('当前分支: ' + stdout.trim()); }); // 流式执行:适合输出巨大的长命令 const task = spawn('ffmpeg', ['-i', 'in.mp4', 'out.mp4']); task.stderr.on('data', (chunk) => { process.stdout.write(chunk); }); task.on('close', (code) => { console.log('退出码: ' + code); });