此篇文章瀏覽量:
878
Process 模組是 Node.js 提供的一個全域物件,可以在任何位置直接存取該物件,該物件包含了程式中所佔用的全部系統資源,例如:CPU、I/O、記憶體、環境變數等。因此,對 Process 進行有效的管理是很重要的。
取得應用程式目前的所在目錄、改變應用程式目前所在的目錄
console.log('目前的所在目錄位置:' + process.cwd());
console.log('更改目錄位置到: /Users/carlos');
process.chdir('/Users/carlos');
console.log('目前的所在目錄位置:' + process.cwd());
// 輸出以下內容:
目前的所在目錄位置:/Users/carlos/Documents/test
更改目錄位置到: /Users/carlos
目前的所在目錄位置:/Users/carlos
取得系統相關資訊
// 輸出處理程序 PID console.log(process.pid); // 輸出處理程序名稱(此例為 node) console.log(process.title); // 輸出 node 的版本號(此例為 v6.11.2) console.log(process.version); // 輸出 node 的版本相關屬性 console.log(process.versions); { http_parser: '2.7.0', node: '6.11.2', v8: '5.1.281.103', uv: '1.11.0', zlib: '1.2.11', ares: '1.10.1-DEV', icu: '58.2', modules: '48', openssl: '1.0.2l' } // 輸出 node 的系統組態相關設定 console.log(process.config); // 輸出執行現在處理程序可執行檔的絕對路徑 console.log(process.execPath); // /usr/local/bin/node // 輸出現在處理程序的命令列參數陣列 console.log(process.argv); [ '/usr/local/bin/node', '/Users/carlos/Documents/test/buffer-define.js' ] // 輸出現在系統平台(此例為 darwin) console.log(process.platform); // 輸出現在 CPU 架構(此例為 X64) console.log(process.arch); // 輸出系統環境變數 console.log(process.env);
process 的標準輸出串流
process.stdout.write('output\n'); // 會輸出 output 文字並斷行。與 console.log() 是相同的,因為 console.log() 就是封裝了 process.stdout.write() 方法後實作的結果。
process 的標準錯誤串流
var fs = require('fs');
var file = 'err.txt';
var encoding = 'UTF-8';
fs.readFile(file, encoding, function(err, data){
if(err){
process.stderr.write('err: ' + err + '\n');
} else {
console.log(data);
}
});
// 若檔案不存在的話,就會輸出以下:
err: Error: ENOENT: no such file or directory, open 'err.txt'
process 的標準輸入串流
// 接受 console 輸入 process.stdin.setEncoding('utf8'); process.stdin.on('readable', function(){ var chunk = process.stdin.read(); if(chunk !== null){ process.stdout.write('Print Data: ' + chunk + '\n'); } }); // 按下「Ctrl + d」後,結束 console process.stdin.on('end', function(){ process.stdout.write('end.\n'); });
如何 kill 處理程序
console.log('目前 process id:' + process.pid);
process.on('SIGHUP', function(){ // 用於終止控制台 Node 處理程序
console.log('Got SIGHUP signal.');
});
setTimeout(function(){
console.log('Exiting...');
process.exit(0); // 這行才會真正的終止目前的 process
console.info('已退出 process id:' + process.pid); // 此行並不會輸出,因為該 process 已結束。
}, 1000);
process.kill(process.pid, 'SIGHUP'); // 這並不會結束 process,只是發出 SIGHUP 訊號。
console.info('正在結束 process id:' + process.pid);
Process 模組的非同步方法:process.nextTick()
可以使用 process.nextTick() 方法來取代 setTimeout() 方法,因為效率較高。
console.time('startB'); // 計時器 startB 開始計時
console.log('start - setTimeout');
setTimeout(function(){ // setTimeout() 的非同步作業
console.log('nextTick callback 2');
}, 0);
console.log('scheduled - setTimeout');
console.timeEnd('startB'); // 計時器 startB 結束計時
console.time('startA'); // 計時器 startA 開始計時
console.log('start - nextTick');
process.nextTick(function(){ // process.nextTick() 的非同步作業
console.log('nextTick callback 1');
});
console.log('scheduled - nextTick');
console.timeEnd('startA'); // 計時器 startA 結束計時
console.info('== Process nextTick ==');
輸出結果如下圖,可以得知 process.nextTick() 效率很高,幾乎無阻塞,所以「nextTick callback 1」反而先被輸出。