nodejs的process是一個全局對象,他提供了一些方法和屬性,node.js官方的API說的很簡單,並沒有把一些詳細的應用方法和作用寫出來,下面結合我自己的學習,做一下小結吧。
1、Event: 'exit'
這是process的退出事件,官方示例很清楚,當process退出時觸發。即我們按“ctrl+c”時觸發。
2、Event: 'uncaughtException'
這是process的異常事件,uncaughtException譯為:未捕獲的異常,可以利用這個函數來捕獲整個進程運行時的異常,這里可以理解為“使本node.js進程中斷的異常”,因為它的官方示例在異常函數下面的代碼將不會執行。
3、Signal Events
這是process的自定義事件,可以為process對象自定義一些事件。這里官方示例如下:
process.stdin.resume(); //這句話是為了不讓控制台推出
process.on('SIGINT', function () { //SIGINT這個信號是系統默認信號,代表信號中斷,就是ctrl+c
console.log('Got SIGINT. Press Control-D to exit.');
});
官方API還說可以自定義名字來監聽process事件,我們試一下,代碼如下:
process.on('SIGUSR1', function (d) { //這里監聽 SIGUSR1 事件
console.log('Bye-'+d); //這里將輸出Bye-Bye,然后推出進程
process.exit(0);
});
process.emit('SIGUSR1', 'Bye'); //利用emit觸發SIGUSR1,然后傳參數為Bye
4、process.stdout
官方的示例和代碼很清楚,控制台輸出流。
console.log = function (d) {
process.stdout.write(d + '\n');
};
5、process.stdin
進程控制台輸入流,官方代碼看了不解,於是copy到linux系統里運行一下,就明白了
process.stdin.resume(); process.stdin.setEncoding('utf8'); process.stdin.on('data', function (chunk) { process.stdout.write('data: ' + chunk); }); process.stdin.on('end', function () { process.stdout.write('end'); });
輸入的命令和輸出:
$ node test.js
ffff
data: ffff
6、process.argv
這是一個數組,數組里存放着啟動這個node.js進程各個參數和命令代碼,官方代碼一目了然。
7、process.execPath
返回當前node.js進程的啟動命令路徑,也就是node.js安裝目錄下的node命令路徑,是一個絕對路徑
$ node test.js
url: /usr/local/bin/node
8、process.chdir(directory) 和 process.cwd()
process.cwd() 返回當前進程的工作目錄,process.chdir(directory)則改變進程的工作目錄,如果改變失敗將拋出一個異常。代碼見官方API。
舉個例子:
如果一個進程工作在 /red-hat/,現在創建在 "./"目錄下創建一個foo.txt,則會在/red-hat/foo.txt創建,如果改變進程工作目錄為/red/,則創建foo.txt會在/red/foo.txt創建。注意:node.js的require()不受這個限制,他是以當前文件的。在執行child_process.exec()方法時需要考慮這一點。
9、process.env
返回當前linux系統的信息,我可以輸入一下代碼來看系統信息
console.log(JSON.stringify(process.env));
10、process.exit(code=0)
kill當前進程,退出本進程。
11、process.getgid()、process.setgid(id)、process.getuid()、process.setuid(id)
獲取和設置進程的groupid和userid。
12、process.version、process.versions
node.js的版本和node.js的版本對象
13、process.installPrefix
返回nodejs的安裝前綴
14、process.kill(pid, signal='SIGTERM')
發出一個kill信號給指定pid,如果signal不指定,則默認為“SIGTERM”,官方API特別提醒,這個kill信號只是一個信號,並不是linux下的kill命令,並不會真的將那個pid殺死,要想通過kill殺死指定pid,則需要在指定pid監聽“SIGTERM”信號,然后執行process.exit(0);即可。
15、process.pid、process.title、process.arch、process.platform
進程id,進程名字,進程架構(如:X64),進程平台(如:linux)
16、process.memoryUsage()
進程的內存使用情況,API很清楚。
17、process.nextTick(callback)
異步執行callback函數,注意,這比 "setTimeout(fn, 0) " 要高效很多。當有一些比較耗時的操作可以用在process.nextTick(callback) 中,這樣可以不阻塞整個函數執行。
18、process.umask([mask])
設置進程的user mask值,什么是umask值呢?
在linux系統有一個系統命令:$ umask,主要作用是修改系統默認的創建文件和文件夾的權限。
注意這句話:Returns the old mask if mask argument is given, otherwise returns the current mask.
當對process.umask()方法傳遞參數時,則返回舊的umask值,否則返回當前的umask值。
這里如果我們設置:
var oldmask, newmask = 0644;
oldmask = process.umask(newmask);
console.log('Changed umask from: ' + oldmask.toString(8) + ' to ' + newmask.toString(8));
輸出022和0644,當umask = 022時,新建的目錄權限是755,新建文件的權限是 644。具體可以參考linux umask手冊。這里只是修改由本node.js進程創建的文件和目錄的權限。
19、process.uptime()
官方給出結果是node進程運行的秒數
20、process.reallyExit(status)
真實推出本進程,不觸發‘exit’事件
21、process._kill(pid,sig)
用於給指定pid的進程發送指定信號(類似linux下的kill命令)
var pid=process.pid;
process._kill(pid,9);
22、process.binding(name)
這個方法用於返回指定名稱的內置模塊。例如下面的代碼將打印node_net模塊所有的可以調用的方法或變量。
var binding=process.binding('net');
console.dir(binding);
