文章目錄
- 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 進程創建的獨立進程。它們可以運行系統命令(如 ls
、git
等)或其他腳本(如 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
實例。 - 特點:
- 適合處理大輸出或需要實時處理流的任務(如視頻處理、日志流)。
- 不會緩存輸出,數據通過
stdout
和stderr
流返回。
示例:
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