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)
}
复制代码
看看谁点赞了