1. 程式人生 > >node總結之全域性物件瞭解下(二)

node總結之全域性物件瞭解下(二)

咱們接著上篇文章來看,process這個全域性變數,它是global物件的一個屬性,用於描述當前Node.js 程序狀態的物件,提供了一個與作業系統的簡單介面。通常在我們寫本地命令列程式的時候,少不了要 和它打交道。咱們來看下 process 物件的一些最常用的成員方法:

序號 事件 & 描述
1 exit
當程序準備退出時觸發。
2 beforeExit
當 node 清空事件迴圈,並且沒有其他安排時觸發這個事件。通常來說,當沒有程序安排時 node 退出,但是 'beforeExit' 的監聽器可以非同步呼叫,這樣 node 就會繼續執行。
3 uncaughtException
當一個異常冒泡回到事件迴圈,觸發這個事件。如果給異常添加了監視器,預設的操作(列印堆疊跟蹤資訊並退出)就不會發生。
4 Signal 事件
當程序接收到訊號時就觸發。訊號列表詳見標準的 POSIX 訊號名,如 SIGINT、SIGUSR1 等。

來看例項:

process.on('exit', function(code) {

  // 以下程式碼永遠不會執行
  setTimeout(function() {
    console.log("該程式碼不會執行");
  }, 0);
  
  console.log('退出碼為:', code);
});
console.log("程式執行結束");

咱們再來看退出狀態碼:

狀態碼 名稱 & 描述
1 Uncaught Fatal Exception
有未捕獲異常,並且沒有被域或 uncaughtException 處理函式處理。
2 Unused
保留
3 Internal JavaScript Parse Error
JavaScript的原始碼啟動 Node 程序時引起解析錯誤。非常罕見,僅會在開發 Node 時才會有。
4 Internal JavaScript Evaluation Failure

JavaScript 的原始碼啟動 Node 程序,評估時返回函式失敗。非常罕見,僅會在開發 Node 時才會有。
5 Fatal Error
V8 裡致命的不可恢復的錯誤。通常會列印到 stderr ,內容為: FATAL ERROR
6 Non-function Internal Exception Handler
未捕獲異常,內部異常處理函式不知為何設定為on-function,並且不能被呼叫。
7 Internal Exception Handler Run-Time Failure
未捕獲的異常, 並且異常處理函式處理時自己丟擲了異常。例如,如果 process.on('uncaughtException') 或 domain.on('error') 丟擲了異常。
8 Unused
保留
9 Invalid Argument
可能是給了未知的引數,或者給的引數沒有值。
10 Internal JavaScript Run-Time Failure
JavaScript的原始碼啟動 Node 程序時丟擲錯誤,非常罕見,僅會在開發 Node 時才會有。
12 Invalid Debug Argument
設定了引數--debug 和/或 --debug-brk,但是選擇了錯誤埠。
128 Signal Exits
如果 Node 接收到致命訊號,比如SIGKILL 或 SIGHUP,那麼退出程式碼就是128 加訊號程式碼。這是標準的 Unix 做法,退出訊號程式碼放在高位。

 之後我們來看process的各種屬性:

序號. 屬性 & 描述
1 stdout
標準輸出流。
2 stderr
標準錯誤流。
3 stdin
標準輸入流。
4 argv
argv 屬性返回一個數組,由命令列執行指令碼時的各個引數組成。它的第一個成員總是node,第二個成員是指令碼檔名,其餘成員是指令碼檔案的引數。
5 execPath
返回執行當前指令碼的 Node 二進位制檔案的絕對路徑。
6 execArgv
返回一個數組,成員是命令列下執行指令碼時,在Node可執行檔案與指令碼檔案之間的命令列引數。
7 env
返回一個物件,成員為當前 shell 的環境變數
8 exitCode
程序退出時的程式碼,如果程序優通過 process.exit() 退出,不需要指定退出碼。
9 version
Node 的版本,比如v0.10.18。
10 versions
一個屬性,包含了 node 的版本和依賴.
11 config
一個包含用來編譯當前 node 執行檔案的 javascript 配置選項的物件。它與執行 ./configure 指令碼生成的 "config.gypi" 檔案相同。
12 pid
當前程序的程序號。
13 title
程序名,預設值為"node",可以自定義該值。
14 arch
當前 CPU 的架構:'arm'、'ia32' 或者 'x64'。
15 platform
執行程式所在的平臺系統 'darwin', 'freebsd', 'linux', 'sunos' 或 'win32'
16 mainModule
require.main 的備選方法。不同點,如果主模組在執行時改變,require.main可能會繼續返回老的模組。可以認為,這兩者引用了同一個模組。

例項如下:

// 輸出到終端
process.stdout.write("Hello World!" + "\n");

// 通過引數讀取
process.argv.forEach(function(val, index, array) {
   console.log(index + ': ' + val);
});

// 獲取執行路徑
console.log(process.execPath);


// 平臺資訊
console.log(process.platform);

完事就是Process的一些方法:

序號 方法 & 描述
1 abort()
這將導致 node 觸發 abort 事件。會讓 node 退出並生成一個核心檔案。
2 chdir(directory)
改變當前工作程序的目錄,如果操作失敗丟擲異常。
3 cwd()
返回當前程序的工作目錄
4 exit([code])
使用指定的 code 結束程序。如果忽略,將會使用 code 0。
5 getgid()
獲取程序的群組標識(參見 getgid(2))。獲取到得時群組的數字 id,而不是名字。
注意:這個函式僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
6 setgid(id)
設定程序的群組標識(參見 setgid(2))。可以接收數字 ID 或者群組名。如果指定了群組名,會阻塞等待解析為數字 ID 。
注意:這個函式僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
7 getuid()
獲取程序的使用者標識(參見 getuid(2))。這是數字的使用者 id,不是使用者名稱。
注意:這個函式僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
8 setuid(id)
設定程序的使用者標識(參見setuid(2))。接收數字 ID或字串名字。果指定了群組名,會阻塞等待解析為數字 ID 。
注意:這個函式僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
9 getgroups()
返回程序的群組 iD 陣列。POSIX 系統沒有保證一定有,但是 node.js 保證有。
注意:這個函式僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
10 setgroups(groups)
設定程序的群組 ID。這是授權操作,所以你需要有 root 許可權,或者有 CAP_SETGID 能力。
注意:這個函式僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
11 initgroups(user, extra_group)
讀取 /etc/group ,並初始化群組訪問列表,使用成員所在的所有群組。這是授權操作,所以你需要有 root 許可權,或者有 CAP_SETGID 能力。
注意:這個函式僅在 POSIX 平臺上可用(例如,非Windows 和 Android)。
12 kill(pid[, signal])
傳送訊號給程序. pid 是程序id,並且 signal 是傳送的訊號的字串描述。訊號名是字串,比如 'SIGINT' 或 'SIGHUP'。如果忽略,訊號會是 'SIGTERM'。
13 memoryUsage()
返回一個物件,描述了 Node 程序所用的記憶體狀況,單位為位元組。
14 nextTick(callback)
一旦當前事件迴圈結束,呼叫回撥函式。
15 umask([mask])
設定或讀取程序檔案的掩碼。子程序從父程序繼承掩碼。如果mask 引數有效,返回舊的掩碼。否則,返回當前掩碼。
16 uptime()
返回 Node 已經執行的秒數。
17 hrtime()
返回當前程序的高分辨時間,形式為 [seconds, nanoseconds]陣列。它是相對於過去的任意事件。該值與日期無關,因此不受時鐘漂移的影響。主要用途是可以通過精確的時間間隔,來衡量程式的效能。
你可以將之前的結果傳遞給當前的 process.hrtime() ,會返回兩者間的時間差,用來基準和測量時間間隔。

例項如下:

// 輸出當前目錄
console.log('當前目錄: ' + process.cwd());

// 輸出當前版本
console.log('當前版本: ' + process.version);

// 輸出記憶體使用情況
console.log(process.memoryUsage());

好啦,本次記錄就到這裡了。

如果感覺不錯的話,請多多點贊支援哦。。。