全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-15 8 分钟 ✍️ juanwangdev

Node.js 进程与 child_process

child_process 模块用于衍生子进程,是 Node.js 多进程编程的核心。

核心方法

四种异步方式

方法用途返回值
exec执行命令,缓存输出ChildProcess
execFile执行可执行文件ChildProcess
spawn启动进程,流式输出ChildProcess
fork衍生 Node.js 子进程ChildProcess

exec 执行命令

JavaScript
const { exec } = require('child_process');

exec('ls -la', (error, stdout, stderr) => {
  if (error) {
    console.error(`执行错误: ${error.message}`);
    return;
  }
  console.log(stdout);
});

spawn 流式处理

JavaScript
const { spawn } = require('child_process');

const ls = spawn('ls', ['-la']);

ls.stdout.on('data', (data) => {
  console.log(`输出: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.error(`错误: ${data}`);
});

ls.on('close', (code) => {
  console.log(`进程退出码: ${code}`);
});

fork 衍生 Node 进程

JavaScript
const { fork } = require('child_process');

const child = fork('./child.js');

child.on('message', (msg) => {
  console.log('收到子进程消息:', msg);
});

child.send({ hello: 'world' });

同步方法

JavaScript
const { execSync, spawnSync } = require('child_process');

// 同步执行命令
const output = execSync('ls -la');
console.log(output.toString());

进程间通信

JavaScript
// 父进程
const child = fork('./worker.js');
child.send({ type: 'task', data: 'hello' });
child.on('message', (msg) => {
  if (msg.type === 'result') {
    console.log('结果:', msg.data);
  }
});

// 子进程 worker.js
process.on('message', (msg) => {
  if (msg.type === 'task') {
    process.send({ type: 'result', data: 'processed' });
  }
});

注意事项

  • exec 适合小输出量命令,输出超过 maxBuffer 会截断
  • spawn 适合大输出或流式处理场景
  • fork 只能用于 Node.js 脚本,自动建立 IPC 通道
  • 子进程默认继承父进程的环境变量

要点总结

  • exec/execFile 缓存输出,适合简单命令
  • spawn 流式输出,适合大数据处理
  • fork 专用于 Node.js 子进程,内置 IPC 通信
  • 同步方法会阻塞主线程,谨慎使用
  • 通过 send/on('message') 实现进程间通信

📝 发现内容有误?点击此处直接编辑

← 上一篇 Node.js 加密与安全 (crypto)
下一篇 → Node.js 集群 (cluster) 模块
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库