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.pswp.cn/bicheng/81169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81169.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue3吸頂導航的實現

吸頂導航實現 【實現目標】: 在Layout頁面中,瀏覽器上下滾動時,距離頂部距離大于80px吸頂導航顯示,小于則隱藏。 【實現過程】: 通過layout接口獲取分類列表內容并使用categorystore進行狀態管理,獲取到…

雙向長短期記憶網絡-BiLSTM

5月14日復盤 二、BiLSTM 1. 概述 雙向長短期記憶網絡(Bi-directional Long Short-Term Memory,BiLSTM)是一種擴展自長短期記憶網絡(LSTM)的結構,旨在解決傳統 LSTM 模型只能考慮到過去信息的問題。BiLST…

2025年Flutter項目管理技能要求

在2025年,隨著Flutter技術的廣泛應用和項目復雜度的提升,項目管理的重要性愈發凸顯。Flutter項目管理不僅需要技術能力,還需要良好的溝通、協調、規劃和執行能力。本文將詳細探討2025年Flutter項目管理應具備的技能要求,幫助項目管…

OpenCV CUDA模塊中逐元素操作------數學函數

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 在OpenCV的CUDA模塊中,確實存在一系列用于執行逐元素數學運算的函數,包括指數、對數、平方根等。這些函數對于高級圖像處…

PhpStudy | PhpStudy 工具安裝 —— Kali Linux 系統安裝 PhpStudy

🌟想了解這個工具的其它相關筆記?看看這個:[網安工具] 服務器環境配置工具 —— PhpStudy 使用手冊 筆者備注:演示雖然是 Kali Linux,但其實 Linux 系列都可以參考此流程完成安裝。 在前面的章節中,筆者簡…

第6講、全面拆解Encoder、Decoder內部模塊

全面拆解 Transformer 架構:Encoder、Decoder 內部模塊解析(附流程圖小測驗) 關鍵詞:Transformer、Encoder、Decoder、Self-Attention、Masked Attention、位置編碼、殘差連接、多頭注意力機制 Transformer 自 2017 年誕生以來&am…

游戲引擎學習第283天:“讓‘Standing-on’成為一個更嚴謹的概念

如果同時使用多個OpenGL上下文,并且它們都有工作負載,GPU或GPU驅動程序如何決定調度這些工作?我注意到Windows似乎優先處理活動窗口的OpenGL上下文(即活動窗口表現更好),挺有意思的…… 當多個OpenGL上下文…

深度學習讓魚與熊掌兼得

通常,一個大的復雜的模型的loss會低,但是擬合方面不夠,小的模型在擬合方面更好,但是loss高,我們可以通過深度學習來得到一個有著低loss的小模型 我們之前學過,peacewise linear可以用常數加上一堆這個階梯型函數得到,然后因為peacewise linear可以逼近任何function,所以理論上…

如何在 AWS 上構建支持 AVIF 的前端圖片優化方案

一、為什么使用 AVIF 圖片格式? 優勢點 說明 高壓縮率 在相似質量下,AVIF 文件比 JPEG/PNG/WebP 更小,能有效節省帶寬和存儲空間。 更高畫質 即使在低碼率下也能保持清晰細節,減少壓縮帶來的馬賽克或模糊問題。 支持透明度 …

C++中的std::allocator

C中的std::allocator 文章目錄 C中的std::allocator1.std::allocator1.1C中的placement new 和operator new1.2一個custom allocator的實現1.3使用std::allocator_traits實現allocator 1.std::allocator C中的std::allocator默默工作在CSTL中的所有容器的內存分配上&#xff0…

CodeBuddy編程新范式

不會寫?不想寫? 騰訊推出的CodeBuddy徹底解放雙手。 示例 以下是我對CodeBuddy的一個小體驗。 我只用一行文字對CodeBuddy說明了一下我的需求,剩下的全部就交給了CodeBuddy,我需要做的就是驗收結果即可。 1.首先CodeBuddy會對任…

QML學習01(設置寬度、高度、坐標點、標題,信號與槽,鍵盤事件)

QML學習 1、前言2、QML3、QML和QWidget的區別3、QtQuick下的Windows應用4、總結 1、前言 記錄一下QML學習的過程,方便自己日后回顧,也可以給有需要的人提供幫助。 2、QML QML是 Qt 框架中的一種聲明式編程語言,專門用于快速設計和開發用戶…

在VSCode中接入DeepSeek的指南

本文將介紹三種主流接入方式,涵蓋本地模型調用和云端API接入方案。 一、環境準備 1.1 基礎要求 VSCode 1.80+Node.js 16.x+Python 3.8+(本地部署場景)已部署的DeepSeek服務(本地或云端)1.2 安裝必備插件 # 打開VSCode插件面板(Ctrl+Shift+X) 搜索并安裝: - DeepSeek Of…

機器學習-計量經濟學

機器學習 不要事前決定變量關系,關鍵是誰也不知道啊,機器學習學習的模型(那也不是真實的關系啊) 這就是自然學科的好處:只要不斷的優化這個未知的東西(函數),然后在數據上&#xff…

五、Linux賬號與權限管理

1、管理用戶和組賬號 1.1、用戶 1.1.1、用戶的概念及作用 在Linux系統中,用戶(User)指的是可以訪問系統資源的個體實體。每個用戶都有一個唯一的用戶賬號,用于標識和管理其在系統中的活動和訪問權限。 用戶的重要性和功能: 身份認證和訪問控制: 用戶賬號用于身份認證,確…

精益數據分析(61/126):移情階段評分體系構建與實戰案例解析

精益數據分析(61/126):移情階段評分體系構建與實戰案例解析 在創業的移情階段,如何科學評估用戶需求的真實性與緊迫性,是決定后續產品方向的關鍵。今天,我們結合《精益數據分析》中的評分框架,…

完成反射宇宙的最后一塊拼圖:泛型集合

反射,c#的黑科技,一手打造漂亮的,專屬于自己的屬性框 之前分享的: 如何寫一個自定義屬性控件的功能,但是只是對基礎的類型,比如String,bool,int等,但是對list<T>,Vector<T>這種泛型集合類型支持的不是很好,剛好最近重新研究了一下,將這個非常重要的功能完成了. 效…

Redis--基礎知識點--26--過期刪除策略 與 淘汰策略

Redis 的過期策略和淘汰策略是內存管理的核心機制&#xff0c;分別用于處理鍵的自動失效和內存不足時的數據清理。以下是詳細說明&#xff1a; 1 、過期刪除策略&#xff08;Expiration Policy&#xff09; 處理已設置過期時間&#xff08;EXPIRE&#xff09;的鍵&#xff0c;…

第六天——貪心算法——字符串分隔

1. 題目 給定一個字符串 s&#xff0c;我們需要將其劃分為盡可能多的部分&#xff0c;使得同一字母最多出現在一個部分中。 例如&#xff1a;字符串 "ababcc" 可以劃分為 ["abab", "cc"]&#xff0c;但要避免 ["aba", "bcc&quo…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: 注意“回車換行“的跨平臺使用.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…