process 對象是一個全局變量,它提供當前 Node.js 進程的有關信息,以及控制當前 Node.js 進程。 由於是全局變量,因此無需使用 require()。在Node.js中每一個應用程序都是一個進程類的實例對象。javascript
process.stdin.resume();
process.stdin.on('data',function(chunk){
process.stdout.write(`進程接收到數據: `+chunk);
});
複製代碼
process.argv.forEach((val,index,ary)=> console.log(index,val));
複製代碼
1.memoryUsage 內存佔用狀況java
process.memoryUsage()
複製代碼
2.nextTick nextTick方法用於將一個函數推遲到代碼中所書寫的下一個同步方法執行完畢或異步方法的回調函數開始執行前調用 3. chdir chdir方法用於修改Node.js應用程序中使用的當前工做目錄,使用方式以下node
process.chdir(directory);
複製代碼
4.cwd cwd方法用返回當前目錄,不使用任何參數linux
console.log(process.cwd());
複製代碼
5.chdir 改變當前的工做目錄shell
console.log(`當前目錄: ${process.cwd()}`);
process.chdir('..); console.log(`上層目錄: ${process.cwd()}); 複製代碼
6.exit 退出運行Node.js應用程序的進程數組
process.exit(0);
複製代碼
7.killbash
process.kill(pid,[signal]);
複製代碼
8.uptime 返回當前程序的運行時間架構
process.uptime()
複製代碼
9.hrtime 測試一個代碼段的運行時間,返回兩個時間,第一個單位是秒,第二個單位是納秒異步
let fs = require('fs); let time = process.hrtime(); let data = fs.readFileSync('index.txt'); let diff = process.hrtime(time); console.log(`讀文件操做耗費的%d秒`,diff[0]); 複製代碼
10.exitide
當運行Node.js應用程序進程退出時觸發進程對象的exit事件。能夠經過指定事件回調函數來指定進程退出時所執行的處理。(先退出,後關閉)
process.on('exit',function(){
console.log('Node.js進程被推出); }); process.exit(); 複製代碼
11.uncaughtException 當應用程序拋出一個未被捕獲的異常時觸發進程對象的uncaughtException事件
process.on('uncaughtException',function(err){
console.log('捕獲到一個未被處理的錯誤:',err);
});
複製代碼
12.信號事件
process.stdin.resume();
process.on('SIGINT',function(){
console.log('接收到SIGINT信號');
});
複製代碼
spawn
child_process.spawn(command,[args],[options]);
複製代碼
spawn
let {spawn} = require('child_process');
let path = require('path');
// process.cwd()
let child = spawn('node',['1.test.js','a','b','c'],{
cwd:path.join(__dirname,'pro')
});
//若是不寫stdio 默認是管道類型
child.stdout.on('data',function(data){
console.log(data.toString());
});
複製代碼
1.test.js
process.argv.slice(2).forEach(function(arg){
process.stdout.write(arg);
})
複製代碼
node 執行spawn文件,結果以下
a
bc
exit
close
複製代碼
detached
// detach 將主進程關掉,子進程能夠本身運行
// unref()
let {spawn} = require('child_process');
let path = require('path');
let fd = require('fs').openSync('./100.txt','w')
let child = spawn('node',['detach.js'],{
cwd:path.join(__dirname,'pro'),
stdio:['ignore',fd,'ignore'],
detached:true
});
child.unref();
複製代碼
detached.test.js
// 會自動將這個描述符包裝成可寫流
setInterval(function(){
process.stdout.write('hello');
},1000);//最後只能在任務管理器中關了進程
複製代碼
ipc
用send和onmessage通訊 ipc
let {spawn} = require('child_process');
let path = require('path');
let child = spawn('node',['3.ipc.js'],{
cwd:path.join(__dirname,'pro'),
stdio:['pipe','pipe','pipe','ipc']
})
// ignore 不要子進程的數據
// pipe 管道創建管道
// null
child.send({name:'李雷'});
child.on('message',function(data){
console.log(data);//不會自動關閉,會一直跑着
child.kill(); // 殺死進程
});
複製代碼
ipc.test.js
process.on('message',function(msg){
process.send(msg.name+'很帥')
})
複製代碼
fork
child_process.fork(modulePath,[args],[options]);
複製代碼
fork.js
let { spawn } = require('child_process');
let path = require('path');
let child = fork('fork.js', ['a', 'b', 'c'], {
cwd: path.join(__dirname, 'pro'),
silent: false // 這句話的意思就是 ['ignore','ignore','ignore','ipc']安靜
});
// 默認支持ipc的方式
// 默認的fork [0,1,2,'ipc']
child.send('hello');
複製代碼
其實fork的實現很簡單
function fork(modulePath, args, options = {}) {
if (options.silent) {
options.stdio = ['ignore', 'ignore', 'ignore', 'ipc']
} else {
options.stdio = [0, 1, 2, 'ipc']
}
return spawn('node', [modulePath, ...args],options)
}
複製代碼
看看誰點讚了