process 对象是一个全局变量,是一个 EventEmitter 实例,提供了当前 Node.js 进程的信息和操作方法。
系统信息
process 对象提供了属性用于返回关键系统信息,常用的有
- title:进程名称,默认值 node,程序可以修改,可以让错误日志更清晰
 - pid:当前进程 pid
 - ppid:当前进程的父进程 pid
 - platform:运行进程的操作系统(aix、drawin、freebsd、linux、openbsd、sunos、win32)
 - version:Node.js 版本
 - env:当前 Shell 的所有环境变量
 
控制台输入输出
Node.js 和标准输入、输出设备交互对象也通过 process 对象提供。
process.stdin.pipe(process.stdout)
简单一行代码可以实现把控制台输入内容在控制台原样打印出来
执行信息
process.execPath
process.execPath 属性返回执行当前脚本的 Node 二进制文件的绝对路径。
在我的电脑中,node.exe 存放在
C:\Program Files\nodejs\node.exe通过该属性获取到的结果就是这个。
process.argv
process.argv 属性返回一个数组,内容是执行脚本时的参数,但数组前两个是固定的
- 执行当前脚本的 Node 二进制文件的绝对路径
 - 当前执行文件绝对路径
 - 其余的参数是我们在终端输入 Shell 命令行时,我们添加的参数
``` 输入的命令行 node test 45 -a —econsole.log(process.argv);
 
结果: [ ‘C:\Program Files\nodejs\node.exe’, ‘D:\gitRepository\nodeLearn\test’, ‘45’, ‘-a’, ‘—e’ ]
<a name="vt2u6"></a>## process.execArgv`process.execArgv` 属性返回一个数组,成员是命令行下执行脚本时,在 Node 可执行文件与脚本文件之间的命令行参数。```javascriptconsole.log(process.execArgv);
node --inspect test.js[ '--inspect' ]
常用的操作方法
process.chdir():切换工作目录到指定目录process.cwd():返回运行当前脚本的工作目录的路径,也就是执行 node 命令时候的目录process.memoryUsage():返回 Node.js 进程的内存使用情况
进程事件
process 对象是 EventEmitter 对象实例,可以监听一些系统核心事件, 常使用的有
- exit
 - uncaughtException
 - beforExit
 - 
exit
当 Node.js 进程因以下原因之一即将退出时,则会触发
exit事件: 显式调用
process.exit()方法- Node.js 事件循环不再需要执行任何其他工作
 
此时无法阻止退出事件循环,并且一旦所有 exit 事件的监听器都已完成运行时,Node.js 进程将终止
process.on('exit', (code) => {console.log(`退出码: ${code}`);});
uncaughtException
当前进程抛出一个没有被捕捉的错误时,会触发uncaughtException事件
process.on('uncaughtException', function (err) {console.error(err.stack);});
beforeExit
当 Node.js 清空其事件循环并且没有其他工作要安排时,会触发 beforeExit 事件。 
通常 Node.js 进程将在没有调度工作时退出,但是在 beforeExit 事件上注册的监听器可以进行异步调用使 Node.js 进程继续
process.on('beforeExit', (code) => {console.log('进程 beforeExit 事件的代码: ', code);});process.on('exit', (code) => {console.log('进程 exit 事件的代码: ', code);});console.log('此消息最新显示');// 打印:// 此消息最新显示// 进程 beforeExit 事件的代码: 0// 进程 exit 事件的代码: 0
message
如果使用 IPC 通道 fork Node.js 进程,子进程收到父进程使用 childprocess.send() 发送的消息,就会触发 message 事件
process.on('message', (m) => {console.log('子进程收到消息', m);});
process.nextTick(callback)
process.nextTick() 方法将 callback 添加到下一个时间点的队列执行
console.log('1')process.nextTick(() => console.log('2'))console.log('3')// 打印:1 3 2
