1. Process
process是一個全局的對象,不需要require。process提供控制和獲取當前Node.js進程信息的能力。
1.1. Process Events
process對象實際上是一個EventEmitter的一個實例。
下面列舉了process對象上可以監聽的事件。
-
beforeExit
當eventloop是空的時候觸發,直接調用process.exit()並不會觸發此事件 -
disconnect
當IPC通道關閉時觸發 -
exit
當調用 process.exit()後會觸發 -
message
當消息被子進程收到是觸發,消息可能會和原始消息不同 -
multipleResolves
當Promise被多次resolve時觸發 -
rejectionHandled
當Promise被rejected並且錯誤被catch()捕獲是觸發 -
uncaughtException
當發生未捕獲的異常時觸發。當發生未捕獲異常時,程序已經進入了無法預測的狀態,最好的方式是重啓服務 -
unhandledRejection
當Promise被rejected並且沒有使用catch()去捕獲是觸發。最好給每一個Promise增加.catch()方法去處理錯誤 -
warning
當Node.js發出警告時觸發 -
SIGINT
信號事件。還有SIGTERM類似的
1.2. 進程控制相關
-
process.pid
進程id -
process.ppid
父進id -
process.title
當前進程的名稱 -
process.uptime()
獲取當前Node.js進程已經運行的時長 -
process.abort()
中斷Node.js進程 -
process.chdir(directory)
切換路徑 -
process.cwd()
獲取當前工作路徑 -
process.emitWarning(warning[, options])
發送告警信息 -
process.emitWarning(warning[, type[, code]][, ctor])
發送告警信息, 告警信息會觸發warning事件
process.on('warning', (warning) => {
console.warn(warning.name); // 'Warning'
console.warn(warning.message); // 'Something happened!'
console.warn(warning.code); // 'MY_WARNING'
console.warn(warning.stack); // Stack trace
console.warn(warning.detail); // 'This is some additional information'
});
-
process.exit([code])
讓Node.js儘快退出。一般情況下都不需要使用該方法 -
process.exitCode
進程退出碼 -
process.kill(pid[, signal])
kill進程 -
process.nextTick(callback[, ...args])
將回調放入next tick queue
, 詳情建議參考event-loop-timers-and-nexttick -
process.setUncaughtExceptionCaptureCallback(fn)
設置未捕獲異常的回調
1.3. Node.js自身相關
-
process.allowedNodeEnvironmentFlags
被允許的環境標誌 -
process.platform
平臺信息 -
process.release
Node.js版本信息 -
process.version
Node.js版本信息 -
process.versions
獲取Node.js依賴項的版本信息,例如v8、uv、zlib等的版本信息 -
process.env
獲取系統環境變量- 注意: 對process.env的某個屬性改變,並不會影響到系統的環境變量。例如process.env.wdd=1, 並不會在系統上創建一個名爲wdd的環境量。process.env是進程內部共享,進程外部透明的。
- 注意:process.env在 Worker線程上是隻讀的。
- 注意:在windows系統,環境變量名是大小寫不敏感的
- 注意:
環境變量都是字符串
。設置環境變量wdd=100, 那麼process.env.wdd獲取的是字符串100, 而不是數字100。使用時要注意類型轉換。
1.4. 系統運行狀況
-
process.cpuUsage([previousValue])
獲取CPU使用率 -
process.hasUncaughtExceptionCaptureCallback()
指示使用使用process.setUncaughtExceptionCaptureCallback()
設置了回調函數 -
process.memoryUsage()
獲取內存使用情況
1.5. 啓動參數相關
-
process.config
是一個對象,表示編譯當前Node.js的一些配置參數 -
process.arch
獲取當前系統CPU架構 -
process.argv
是一個數組,表示Node.js啓動的參數。數組第一項是Node.js可執行文件的路徑,數組的第二項是你的代碼源文件路徑,其餘項是其他的一些參數。
node process-args.js one two=three four
// print process.argv
process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
});
0: /usr/local/bin/node
1: /Users/mjr/work/node/process-args.js
2: one
3: two=three
4: four
-
process.argv0
實際上是process.argv數組的第一項,只不過它是隻讀的。 -
process.execArgv
是Node.js系統自定義的一些參數,這些參數不會出現在process.argv中,例如--harmony
-
process.execPath
Node.js可執行文件的路徑,如 '/usr/local/bin/node'
1.6. IPC通道相關
-
process.channel
IPC通道,如果IPC通道不存在,那麼該值爲undefined -
process.connected
用來判斷IPC通道是否還在建立 -
process.disconnect()
關閉IPC通道 -
process.send(message[, sendHandle[, options]][, callback])
發送IPC消息
1.7. debug相關
-
process.debugPort
獲取Node.js debug的端口
1.8. C++相關
-
process.dlopen(module, filename[, flags])
動態加載C++代碼
1.9. 用戶與用戶組
-
process.getegid()
獲取有效gid process.setuid(id)
-
process.geteuid()
獲取有效uid -
process.setegid(id)
設置有效uid -
process.getgid()
獲取gid process.setgid(id)
-
process.getgroups()
獲取 process.setgroups(groups)
process.umask([mask])
1.10. Process IO 輸出輸出相關
-
process.stderr
標準錯誤流 -
process.stdin
標準輸入流 -
process.stdout
標註輸出流
process.stdout和process.stderr和Node.js其他stream有很大的不同。
- 他們主要被console.log和console.error使用
-
寫操作是否是同步取決於stream的類型,以及操作系統是windows還是POSIX
- 文件:在windows和POSIX上都是同步
- TTYs(終端):在windows上異步,在POSIX上同步
- Pipes (sockets): 在windows上同步,在POSIX上異步
注意事項
:
由於console.log或者console.error可能是異步的輸出,所以如果輸出的值和你預期的不一致,那麼也不必要大驚小怪,可能因爲它是異步的輸出。
在生產環境,不要將大量日誌輸出到標準輸出