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

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
http://www.xdnf.cn/news/5492.html

相关文章:

  • bazel迁移cmake要点及具体迁移工程示例(apollo radar)
  • SDK does not contain ‘libarclite‘ at the path
  • 【前端】骨架屏
  • 深度解析LLM参数:Top-K、Top-p和温度如何影响输出随机性?
  • 循环语句:for、range -《Go语言实战指南》
  • 矩阵键盘模块
  • Spark(25)在shell中运行Spark程序
  • mapbox进阶,使用mapbox-plugins插件加载饼状图
  • 《AI大模型应知应会100篇》第60篇:Pinecone 与 Milvus,向量数据库在大模型应用中的作用
  • iOS safari和android chrome开启网页调试与检查器的方法
  • 我开源了一个免费在线工具!UIED Tools
  • 【Python 变量类型】
  • 【技巧】离线安装docker镜像的方法
  • MIT XV6 - 1.6 Lab: Xv6 and Unix utilities -uptime
  • AI 时代 UI 设计的未来范式
  • 设计模式之中介者模式
  • 华为行业认证是什么?如何考取华为行业认证?
  • Wpf学习片段
  • Python3(31) CGI 编程
  • 自动驾驶技术栈——DoIP通信协议
  • 鸿蒙 UIAbility组件与UI的数据同步和窗口关闭
  • 【数据结构】——队列
  • 学习threejs,使用Physijs物理引擎,加载各种几何体网格对象
  • 2025 盘古石杯初赛 wp
  • Lambda表达式能用在哪些场景?
  • 学习黑客5 分钟深入浅出理解Windows Editions
  • MyBatis源码解读1(MyBatis回顾)
  • 微调重排序模型:Reranking从入门到实践
  • GPU Gems1-Effective Water Simulation from Physical Models
  • RHCSA Linux系统 Web页面 论坛 网盘的搭建