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')