The process object provides information about, and control over, the current Node.js process.
const process = require('node:process')
console.log(process)1.event
const process = require('node:process')
// 当 Node.js 清空了事件循环并且没有额外的工作安排时触发。这个事件可以让开发者在进程退出前执行一些异步操作。如果在此事件处理程序中调度了异步操作,Node.js 进程可能不会退出。
process.on('beforeExit', (e) => {
console.log('beforeExit', e)
})
// 当进程即将退出时触发。触发时,所有的事件循环、异步操作都已经停止,无法再调度新的操作。开发者可以在此事件中执行最后的同步清理操作,如关闭文件流等。
process.on('exit', (e) => {
console.log('exit', e)
})
// 当一个异常未被捕获时触发。如果不处理这个事件,进程会在触发该事件后立即退出。
process.on('uncaughtException', (e) => {
console.log('uncaughtException', e)
})
// 当一个 Promise 被拒绝(rejected)且没有提供 catch 处理程序时触发。该事件可以用来捕获未处理的 Promise 错误。
process.on('unhandledRejection', (e) => {
console.log('unhandledRejection', e)
})
// 当一个 Promise 被拒绝但稍后有 catch 处理程序时触发。此事件通常在 Promise 被拒绝后的一轮事件循环中触发。
process.on('rejectionHandled', (e) => {
console.log('rejectionHandled', e)
})
// 当 Node.js 发出警告时触发。可以用来捕获和处理 Node.js 发出的警告信息。
process.on('warning', (e) => {
console.log('warning', e)
})
// 在使用 child_process 模块时,当子进程发送消息到父进程时触发。在主进程中可以监听这个事件来处理来自子进程的消息。
process.on('message', (e) => {
console.log('message', e)
})
// 当worker被创建时触发。
process.on('worker', (e) => {
console.log('worker', e)
})
console.log('This message is displayed first.')2.property
Node.js 中 process 对象的不分属性:
process.argv:启动Node.js进程时传入的命令行参数数组。process.env:表示当前用户环境的环境变量对象。process.exitCode:获取或设置进程退出时的退出码。process.pid:当前进程的进程ID。process.ppid:当前进程的父进程ID。process.platform:当前运行平台的字符串,例如'darwin'(macOS)、'win32'(Windows)、'linux'等。process.version:当前运行的Node.js版本字符串。process.versions:一个对象,包含Node.js及其依赖的版本信息。process.arch:当前运行的操作系统CPU架构,例如'x64'、'arm'等。process.release:包含Node.js相关版本和构建元数据的对象。process.title:当前进程的名称,可以被修改。process.config:Node.js构建配置选项的对象。process.execPath:启动当前进程的Node.js可执行文件的绝对路径。process.execArgv:启动当前进程时传给Node.js的命令行选项的数组。
console.log(process)3.methods
process 对象中常用的可执行方法:
process.cwd():返回Node.js进程的当前工作目录。process.chdir(directory):更改Node.js进程的当前工作目录。process.memoryUsage():返回一个对象,表示Node.js进程的内存使用情况。process.uptime():返回Node.js进程的运行时间(以秒为单位)。process.hrtime([time]):返回高分辨率的实时时间,作为一个[seconds, nanoseconds]数组。如果传入time参数,则返回与该时间的差值。process.nextTick(callback):在当前操作完成之后立即执行一个回调函数。process.abort():使Node.js进程立即以非0的退出码终止。process.emitWarning(warning[, options]):发出一个自定义警告,可以指定警告消息和选项。process.kill(pid[, signal]):向指定的进程ID(pid) 发送信号,可以用来终止进程。process.exit([code]):以指定的退出码退出Node.js进程。如果不指定code,默认退出码为0。process.on(eventName, listener):为process对象的事件添加监听器,例如exit、uncaughtException等事件。process.removeListener(eventName, listener):移除指定事件的监听器。process.setUncaughtExceptionCaptureCallback(callback):设置一个回调函数,以捕获未捕获的异常。process.send(message[, sendHandle[, options]][, callback]):如果Node.js进程是通过child_process.fork()创建的子进程,可以使用此方法向父进程发送消息。process.disconnect():如果Node.js进程是通过child_process.fork()创建的子进程,断开与父进程的IPC通道。
4.Exit Codes
Node.js 进程的退出码(Exit Codes)可以帮助判断进程的终止原因。以下是一些常见的退出码及其含义:
0- 正常退出(Success):进程成功完成,没有发生错误。1- 一般性错误(Uncaught Fatal Exception):未捕获的致命异常导致进程退出。3- 内部JavaScript解析错误(Internal JavaScript Parse Error):JavaScript源代码无法解析。4- 内部JavaScript评估失败(Internal JavaScript Evaluation Failure):JavaScript代码在解析后无法执行。5- 致命的V8错误(Fatal Error):V8引擎遇到致命错误(通常与V8内部机制有关)。6- 非函数的异常处理程序(Non-function Internal Exception Handler):异常处理机制设置错误。7- 内部异常处理失败(Internal Exception Handler Run-Time Failure):在处理异常时发生失败。9- 无效的参数(Invalid Argument):传递给Node.js的参数无效或不合法。10- 内部JavaScript运行时失败(Internal JavaScript Run-Time Failure):JavaScript引擎在运行时遇到错误。12- 无效的调试参数(Invalid Debug Argument):启动时传递了无效的调试选项。128+信号编号- 由于接收到信号而退出:进程因接收到信号而退出,信号编号加上128作为退出码。例如,SIGINT信号的编号是2,则进程接收到SIGINT信号时的退出码为130(128 + 2)。137- 因SIGKILL信号被杀死(例如使用kill -9命令):通常用于强制终止进程。139- 段错误(Segmentation Fault):由于访问了无效的内存地址导致的崩溃。143- 因SIGTERM信号被终止:一般用于正常终止进程。
console.log('a')
process.exit(1)
console.log('b')