当前位置: 首页 > article >正文

child_process

Node.js 中的 child_process 模块提供了一系列用于创建和管理子进程的API。这里列出一些常用的API及其使用示例:

1. child_process.exec()

异步执行命令并收集其输出,适合简单命令。

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

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

2. child_process.execFile()

类似于 exec(),但更安全且高效,因为它不会解析命令字符串,而是直接执行文件,并可传入参数数组。

const { execFile } = require('child_process');

execFile('ls', ['-l'], (error, stdout, stderr) => {
  if (error) {
    console.error(`错误: ${error}`);
    return;
  }
  console.log(`标准输出: ${stdout}`);
  console.error(`标准错误: ${stderr}`);
});

3. child_process.spawn()

用于创建一个新的子进程,返回一个ChildProcess实例,可用于复杂交互和流处理。

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

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

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

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

4. child_process.fork()

专门用于创建Node.js子进程,适用于父进程与子进程间通过IPC通信。

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

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

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

child.send({ hello: 'world' }); // 向子进程发送消息

5. child_process.execSync() 和 execFileSync()

同步版本的 exec() 和 execFile(),会阻塞主线程直到命令完成。

const { execSync } = require('child_process');

try {
  let output = execSync('ls -l', { encoding: 'utf8' });
  console.log(output);
} catch (error) {
  console.error(`执行出错: ${error}`);
}

请注意,在实际项目中,应谨慎使用同步API,因为它们会导致Node.js应用暂停响应,直到子进程结束。在可能的情况下,推荐使用异步版本以保持非阻塞特性。


http://www.kler.cn/a/274031.html

相关文章:

  • WebSocket封装
  • vim 按下esc后取消高亮
  • Mac 12.1安装tiger-vnc问题-routines:CRYPTO_internal:bad key length
  • linux tar 文件解压压缩
  • FFmpeg:详细安装教程与环境配置指南
  • EasyExcel(环境搭建以及常用写入操作)
  • (css)vue 自定义背景 can‘t resolve
  • Unity在UGUI上通过绘制网格顶点自由画线
  • Spring Boot+Vue前后端分离项目如何部署到服务器
  • k8s集群部署elk
  • CMU module design
  • Java使用Selenium实现自动化测试以及全功能爬虫
  • 考研机试题
  • 构建部署_Docker常用命令
  • c语言:从1加到N的和
  • 【力扣白嫖日记】601.体育馆的人流量
  • Transformer的前世今生 day01(预训练、统计语言模型)
  • Spring Boot(六十八):SpringBoot 整合Apache tika 实现文档内容解析
  • H266开源视频编码器VVENC现状
  • 【01】htmlcssgit网络基础知识
  • 常用大数据组件的Web端口号总结
  • 高性能服务系列【九】内外网之分
  • 因聚而生 数智有为丨软通动力携子公司鸿湖万联亮相华为中国合作伙伴大会2024
  • 使用ChatGPT高效完成简历制作[中篇3]-有爱AI实战教程(十)
  • 面经(六)武汉超星
  • C++ 字符串转数字的几种方法