贛楠臍橙網(wǎng)絡(luò)營銷推廣方式凱里seo排名優(yōu)化
process對象是一個全局對象,提供當(dāng)前Node.js 進(jìn)程信息并對其進(jìn)行控制。通常用于編寫本地命令行程序。
1.進(jìn)程事件
process
對象是EventEmitter
類的實(shí)例,因此可以使用事件的方式來處理和監(jiān)聽process
對象的各種事件。以下是一些常用的process
對象事件:
- ‘exit’:當(dāng)進(jìn)程即將退出時觸發(fā)??梢杂糜趫?zhí)行一些清理操作。
此時無法阻止事件循環(huán)退出,并且一旦所有 exit 事件的監(jiān)聽器都完成運(yùn)行,Node.is 進(jìn)程將終止。這里給出簡單的示例代碼。
示例代碼:
process.on('exit', (code) => {console.log(`Process exited with code ${code}`);
});
- beforeExit 當(dāng)Node.s 清空其事件循環(huán)并且沒有其他工作要調(diào)度時,會觸發(fā)此事件。
- 通常,Node.js進(jìn)程將在沒有調(diào)度工作時退出,但是在 beforeExit 事件上注冊的監(jiān)聽器可以進(jìn)行異步調(diào)用,從而導(dǎo)致Node.is 進(jìn)程繼續(xù),beforeExit 事件會反復(fù)執(zhí)行 。
因?yàn)閎eforeExit 事件會在 Node.js 清空事件循環(huán)時觸發(fā),但在退出之前beforeExit 事件的處理函數(shù)中包含了一個異步操作 setTimeout,這會導(dǎo)致事件循環(huán)中有一個未完成的異步操作。事件循環(huán)仍然會繼續(xù),直到所有異步操作完成或被取消。
beforeExit 事件的監(jiān)聽器回調(diào)函數(shù)會接收到 process.exitCode(退出碼)作為唯一參數(shù)??梢酝ㄟ^設(shè)置 process.exitCode 的值來指定進(jìn)程退出時的退出碼。
process.on('beforeExit', (exitCode) => {console.log('beforeExit event觸發(fā)');console.log(`Exit code: ${exitCode}`);// 執(zhí)行一些異步操作會導(dǎo)致Node.is 進(jìn)程繼續(xù),beforeExit 事件會反復(fù)執(zhí)行 。
// setTimeout(() => {
// console.log('beforeExit 異步操作');
// }, 1000);});// 模擬異步操作setTimeout(() => {console.log('異步操作');}, 1000);// 模擬同步操作console.log('同步操作');// 設(shè)置退出碼process.exitCode = 1;
在上面的示例中,我們監(jiān)聽了 beforeExit 事件,并在事件處理函數(shù)中打印一些信息,包括退出碼。在事件循環(huán)中,先執(zhí)行同步操作,然后執(zhí)行異步操作。當(dāng)事件循環(huán)中的所有任務(wù)執(zhí)行完畢后,beforeExit 事件會被觸發(fā),我們可以在事件處理函數(shù)中執(zhí)行一些異步操作。
-
‘uncaughtException’:當(dāng)未捕獲的異常發(fā)生時觸發(fā)??梢杂糜诓东@并處理未處理的異常。
示例代碼:process.on('uncaughtException', (err) => {console.error('Uncaught Exception:', err);// 執(zhí)行一些處理邏輯process.exit(1); // 強(qiáng)制退出進(jìn)程 });
-
‘SIGINT’:當(dāng)用戶按下Ctrl+C鍵時觸發(fā)??梢杂糜诓东@并處理用戶的中斷信號。
示例代碼:process.on('SIGINT', () => {console.log('Received SIGINT signal');// 執(zhí)行一些處理邏輯process.exit(0); // 正常退出進(jìn)程 });
-
‘SIGTERM’:當(dāng)進(jìn)程收到終止信號時觸發(fā)??梢杂糜诓东@并處理終止信號。
示例代碼:process.on('SIGTERM', () => {console.log('Received SIGTERM signal');// 執(zhí)行一些處理邏輯process.exit(0); // 正常退出進(jìn)程 });
這些是一些常用的process
對象事件,可以根據(jù)具體的需求來監(jiān)聽和處理相應(yīng)的事件。
退出狀態(tài)碼
狀態(tài)碼 | 名稱 | 說明 |
---|---|---|
1 | Uncaught Fatal Exception(未捕獲異常) | 存在未捕獲異常,并且沒有被域或 uncaughtException 事件處理函數(shù)處理 |
2 | Unused(保留) | Bash Shell 為防內(nèi)部濫用而被保留 |
3 | Internal JavaScript ParseError(內(nèi)部JavaScript 分析錯誤) | Node.js 內(nèi)部的JavaScript 源代碼在引導(dǎo)進(jìn)程中導(dǎo)致了一個語法分析錯誤 |
4 | Internal JavaScript Evaluation Failure(內(nèi)部JavaScript 評估失敗) | Node.js 內(nèi)部的JavaScript 代碼在引導(dǎo)進(jìn)程中導(dǎo)致了一個評估失敗 |
5 | Fatal Error(致命錯誤) | V8 引擎遇到了一個致命錯誤,例如內(nèi)存分配失敗 |
6 | Non-function Internal Exception Handler(非函數(shù)內(nèi)部異常處理程序) | 試圖使用非函數(shù)對象作為異常處理程序 |
7 | Internal Exception Handler Run-Time Failure(內(nèi)部異常處理程序運(yùn)行時失敗) | 異常處理程序在運(yùn)行時遇到了一個錯誤 |
8 | Unused(保留) | 保留狀態(tài)碼 |
9 | Invalid Argument(無效參數(shù)) | 傳遞給Node.js的參數(shù)無效 |
10 | Internal JavaScript Run-Time Failure(內(nèi)部JavaScript運(yùn)行時失敗) | Node.js 內(nèi)部的JavaScript 代碼在運(yùn)行時遇到了一個錯誤 |
12 | Invalid Debug Argument(無效調(diào)試參數(shù)) | 傳遞給Node.js的調(diào)試參數(shù)無效 |
128 | Signal Exits(信號退出) | 如果Nodejs 接收到致命的錯誤信號,如 SIGKILL 或 SIGHUP,那么它的退出代碼將是 128 加上信號碼的值。這是 POSIX的標(biāo)準(zhǔn)做法,例如,信號SIGABRT的值為6,預(yù)期的退出碼將為128+6 或134 |
process 對象屬性
process 對象是 Node.js 的全局對象之一,提供了許多屬性用于控制系統(tǒng)的交互。以下是常用的 process 對象屬性:
-
process.argv:一個包含命令行參數(shù)的數(shù)組。第一個元素是 Node.js 的可執(zhí)行文件路徑,第二個元素是當(dāng)前執(zhí)行的 JavaScript 文件路徑,后續(xù)元素是傳遞給腳本的命令行參數(shù)。
-
process.env:一個包含用戶環(huán)境信息的對象。可以通過該對象訪問環(huán)境變量,如 process.env.HOME。
-
process.pid:當(dāng)前進(jìn)程的進(jìn)程 ID。
-
process.cwd():返回當(dāng)前工作目錄的路徑。
-
process.platform:返回當(dāng)前操作系統(tǒng)的平臺標(biāo)識符,如 ‘darwin’ 表示 macOS,‘win32’ 表示 Windows。
-
process.exitCode:進(jìn)程退出時的退出碼。默認(rèn)為 0,表示成功退出。
-
process.version:Node.js 的版本號。
-
process.versions:一個包含 Node.js 及其依賴模塊版本信息的對象。
-
process.arch:返回當(dāng)前 CPU 架構(gòu),如 ‘x64’。
-
process.title:獲取或設(shè)置進(jìn)程的標(biāo)題。默認(rèn)node
-
process.stdin、process.stdout、process.stderr:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤流。
//argv-test.js
process.stdout.write("Hello World!" + "\n");// 將字符串輸出到終端
//通過參數(shù)讀取
process.argv.forEach(function(val, index, array) {console.log(index + ': ' + val);
});
console.log(process.execPath); // 獲取執(zhí)行路徑
console.log(process.platform); // 獲取平臺信息
執(zhí)行命令:node ./argv-test.js -a -b c
,輸出以下結(jié)果
Hello World!
argv-test.js
2: -a
3: -b
4: c
D:\wushaopeng\nvm\nodejs\node.exe
win32
process 對象的方法
process 對象提供了多種方法用于控制與系統(tǒng)的交互。以下是常用的 process 對象方法:
- process.exit([code]):退出當(dāng)前進(jìn)程。可選地指定退出碼,默認(rèn)為 0。
- process.on(event, listener):注冊事件監(jiān)聽器??梢员O(jiān)聽多種事件,如 ‘exit’、‘uncaughtException’、‘SIGINT’ 等。
- process.cwd():返回當(dāng)前工作目錄的路徑。
- process.chdir(directory):改變當(dāng)前工作目錄為指定的目錄。
- process.kill(pid[, signal]):向指定的進(jìn)程發(fā)送信號??梢杂糜诮K止或控制其他進(jìn)程。
- process.nextTick(callback):將回調(diào)函數(shù)推遲到下一個事件循環(huán)迭代中執(zhí)行。常用于異步操作的回調(diào)函數(shù)。
- process.stdout.write(data):向標(biāo)準(zhǔn)輸出流寫入數(shù)據(jù)。
- process.stderr.write(data):向標(biāo)準(zhǔn)錯誤流寫入數(shù)據(jù)。
- process.stdin.on(event, listener):監(jiān)聽標(biāo)準(zhǔn)輸入流的事件,如 ‘data’、‘end’ 等。
- process.env:一個包含用戶環(huán)境信息的對象。可以通過該對象訪問環(huán)境變量。
- process.memoryUsage( ): 返回一個用于描述Node 進(jìn)程內(nèi)存使用情況的對象,該對象每個屬
性值的單位為字節(jié)。
console.log('當(dāng)前目錄: ' + process.cwd());
console.log('當(dāng)前版本: ' + process.version);
const memoryUsage = process.memoryUsage();
const convertedMemoryUsage = {rss: (memoryUsage.rss / (1024 * 1024)).toFixed(2) + 'MB',heapTotal: (memoryUsage.heapTotal / (1024 * 1024)).toFixed(2) + 'MB',heapUsed: (memoryUsage.heapUsed / (1024 * 1024)).toFixed(2) + 'MB',external: (memoryUsage.external / (1024 * 1024)).toFixed(2) + 'MB',
};
console.log(convertedMemoryUsage);;