從官網學習Node.js Process模塊方法速查

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有很大的不同。

  1. 他們主要被console.log和console.error使用
  2. 寫操作是否是同步取決於stream的類型,以及操作系統是windows還是POSIX

    • 文件:在windows和POSIX上都是同步
    • TTYs(終端):在windows上異步,在POSIX上同步
    • Pipes (sockets): 在windows上同步,在POSIX上異步

注意事項

  • 由於console.log或者console.error可能是異步的輸出,所以如果輸出的值和你預期的不一致,那麼也不必要大驚小怪,可能因爲它是異步的輸出。
  • 在生產環境,不要將大量日誌輸出到標準輸出
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章