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

Node.js中那些常用的进程通信方式

文章目录

    • 1 什么是子进程?
    • 2 核心方法详解
      • 2.1 `child_process.spawn(command, [args], [options])`
      • 2.2 `child_process.exec(command, [options], callback)`
      • 2.3 `child_process.execFile(file, [args], [options], callback)`
      • 2.4 `child_process.fork(modulePath, [args], [options])`
    • 3 `ChildProcess` 实例的属性和事件
    • 4 同步方法
    • 5 使用场景和注意事项
      • 5.1 使用场景
      • 5.2 注意事项
    • 6 实际案例
      • 案例 1:实时日志输出
      • 案例 2:父子进程通信
    • 7 总结

近期文章

  • 浅谈微前端沙箱机制
  • 实现篇:手把手打造一个番茄时钟
  • Vue3响应式原理那些事
  • 实现篇:二叉树遍历收藏版
  • Vue3开发常见性能问题知多少
  • Vue3组件常见通信方式你了解多少?
  • 实现篇:LRU算法的几种实现
  • 从底层视角看requestAnimationFrame的性能增强
  • Nginx Upstream了解一下
  • 实现篇:一文搞懂Promise是如何实现的
  • 一文搞懂 Markdown 文档规则

Nodejs开发过程中,进程通信常常出现,本篇就尝试介绍一下常见通信方式。

1 什么是子进程?

在 Node.js 中,子进程是指通过主 Node.js 进程创建的独立进程。它们可以运行系统命令(如 lsgit 等)或其他脚本(如 Python、Shell 脚本等)。主进程和子进程之间可以通过标准输入输出(stdin、stdout、stderr)或 IPC(进程间通信)进行数据交换。

child_process 模块提供了以下主要方法来创建子进程:

  • spawn():异步创建子进程,适合需要持续输出或流式处理的任务。
  • exec():异步创建子进程,适合执行一次性命令并获取完整输出。
  • execFile():类似于 exec(),但直接执行文件,适合执行二进制文件。
  • fork():专门用于创建 Node.js 子进程,适合运行其他 Node.js 脚本。

2 核心方法详解

2.1 child_process.spawn(command, [args], [options])

  • 功能:异步创建子进程,执行命令,并以流的方式处理输入输出。
  • 参数
    • command:要执行的命令(字符串,例如 'ls')。
    • args:命令的参数(数组,例如 ['-l', '-a'])。
    • options:配置对象,例如:
      • cwd:子进程的工作目录。
      • env:环境变量。
      • shell:是否通过 shell 执行(默认 false)。
  • 返回值:返回一个 ChildProcess 实例。
  • 特点
    • 适合处理大输出或需要实时处理流的任务(如视频处理、日志流)。
    • 不会缓存输出,数据通过 stdoutstderr 流返回。

示例

const { spawn } = require('child_process');// 执行 `ls -la` 命令
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

相关文章:

  • 4.MySQL全量、增量备份与恢复
  • 使用本地部署的 LLaMA 3 模型进行中文对话生成
  • 【WPF】Opacity 属性的使用
  • uniapp|实现手机通讯录、首字母快捷导航功能、多端兼容(H5、微信小程序、APP)
  • WebSocket的原理及QT示例
  • MIT XV6 - 1.6 Lab: Xv6 and Unix utilities -uptime
  • 内存泄漏系列专题分析之十一:高通相机CamX ION/dmabuf内存管理机制Camx ImageBuffer原理
  • 新手安装java所有工具(jdk、idea,Maven,数据库)
  • 迁移 Visual Studio Code 设置和扩展到 VSCodium
  • FFmpeg 与 C++ 构建音视频处理全链路实战(一)—— 环境配置与视频解封装
  • Linux异步通知机制详解
  • 存算一体芯片对传统GPU架构的挑战:在GNN训练中的颠覆性实验
  • labview硬件采集
  • AD22 快速定义PCB板框与DXF导入定义
  • MFC listctrl修改背景颜色
  • 项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台
  • Spark SQL 运行架构详解(专业解释+番茄炒蛋例子解读)
  • 主从架构:技术原理与实现
  • Excel分组计算求和的两种实现方案
  • 运行Spark程序-在Idea中(二)
  • 中国潜水救捞行业协会发布《呵护潜水员职业健康安全宣言》
  • 网信部门曝光网络谣言典型案例,“AI预测彩票号码百分百中奖”等在列
  • 十三届全国政协经济委员会副主任张效廉被决定逮捕
  • 金科股份重整方案通过,正式进入重整计划执行环节
  • 碧桂园境外债务重组:相当于现有公众票据本金额逾50%的持有人已加入协议
  • 保利42.41亿元竞得上海杨浦东外滩一地块,成交楼面单价超8万元