process模塊用來與當前進程的互動。process其實完整的寫法是global.process
process對象提供了一系列的屬性、方法和事件。
一:屬性
- process.pid:當前進程的進程號
- process.version:Node的版本,比如v0.10.18
- process.platform:當前系統平臺,比如Linux
- process.title:默認值爲“node”,可以自定義該值
- process.argv:當前進程的命令行參數數組
- process.env:指向當前shell的環境變量,比如process.env.HOME
- process.execPath:運行當前進程的可執行文件的絕對路徑
- process.stdout:指向標準輸出
- process.stderr:指向標準錯誤
- process.stdin: 指向標準輸入,用於監聽用戶的輸入。
現在對以上的一些屬性進行講解一下
(1、process.stdout process.stderr,在命令窗口中向用戶顯示內容
顯示結果發現該兩個的區別顏色不一樣,跟console.log和console.error差不多。
(2、process.stdin ---該方法用於監聽用戶的輸入。
在webstorm中運行之後在控制檯處出現光標閃爍,說明可以輸入,回車則顯示輸入的內容。
在cmd命令行下運行也是一樣,可以輸入,回車之後顯示輸入的內容,按ctrl+c則可以退出輸入。
在nodeJs的舊版本中,默認情況下,輸入流是關閉的,要監聽處理輸入流數據,首先要開啓輸入流:process.stdin.resume();
不過在新版本中不需要這個了。
我們下面用一個例子來講標準輸入輸出結合起來使用:
process.stdin.setEncoding('utf-8');
var a, b;
process.stdout.write("請輸入a的值:");
process.stdin.on('data',function(chunk){
if(!a){
a = Number(chunk);
process.stdout.write("請輸入b的值:");
}else{
b = Number(chunk);
process.stdout.write("a + b = " +(a+b));
}
});
根據輸入步驟輸入a , b 的值之後,該段代碼的執行結果爲:
(3: process.argv 這個是以數組的形式來顯示
在cmd下命令下執行結果如下:
可以看出輸出的形式是以數組的形式輸出的,0:是node命令的絕對路徑1:是node執行的js文件的絕對路徑,2....(數組的後面主要由執行命令後面跟數據決定)
二:process提供的方法
- process.exit():退出當前進程
- process.cwd():返回運行當前腳本的工作目錄的路徑
- process.chdir():改變工作目錄
- process.nextTick():將一個回調函數放在下次事件循環的頂部
下面我們對process.cwd()來詳細的講解一下
在webstorm下,我們發現執行結果和__dirname的執行結果是一樣的,
但是他們兩個也有區別,__dirname表示代碼js文件所在目錄
process.cwd()表示執行node命令的時候(cmd命令行下),我們在哪個目錄 current working dir
三:process 方法提供的事件
- exit事件 :當前進程退出時,會觸發exit事件
- uncaughtException事件 : 當前進程拋出一個沒有被捕捉的意外時,會觸發uncaughtException事件
- readable :有東西可以讀取的時候就會觸發這個事件
- SIGINT : 如在cmd命令行下輸入ctrl+C 觸發的退出行爲
下面我們對一些事件處理進行詳細的講解
(1、readable
上圖控制檯中綠色框爲輸入的內容,紅色框內的爲回車之後讀取打印出來的數據。
(2、exit SIGINT
下面我們用一個例子來總體瞭解一下這兩個事件。
這次我們在cmd控制檯處運行,運行之後輸入2回車之後則打印了2(如下圖),祝部分主要是process的stdin屬性起的作用
接着我按ctrl+c來進行取消進程,則結果如下圖顯示,首先是ctrl+c觸發了SIGINT事件,所以首先打印了“Program has a signal”;
然後 process.exit();觸發了exit事件,所以後面跟着打印了"Program will exit"。