child_process 的 spawn、exec、execFile 有什么区别?
三者都用于启动子进程,差异在流式 vs 缓冲、是否走 shell:
exec(cmd, cb):通过 shell 执行整条命令,输出缓冲到内存(默认 1MB 上限),适合短输出命令;回调拿(err, stdout, stderr)execFile(file, args, cb):直接执行可执行文件,不走 shell,更安全、略快,参数以数组传入spawn(cmd, args):不走 shell,返回 Stream(stdout/stderr可读流),适合大输出 / 实时处理,不会撑爆内存
import { spawn } from 'child_process'
const ls = spawn('ls', ['-lh', '/usr'])
ls.stdout.on('data', d => process.stdout.write(d))建议:需要实时/大输出用 spawn;简单拿结果用 execFile;避免把用户输入拼进 exec(命令注入风险)。