Skip to content

The process object provides information about, and control over, the current Node.js process.

js
const process = require('node:process')

console.log(process)

1.event

js
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.jsprocess 对象的不分属性:

  1. process.argv:启动 Node.js 进程时传入的命令行参数数组。

  2. process.env:表示当前用户环境的环境变量对象。

  3. process.exitCode:获取或设置进程退出时的退出码。

  4. process.pid:当前进程的进程 ID

  5. process.ppid:当前进程的父进程 ID

  6. process.platform:当前运行平台的字符串,例如 'darwin'(macOS)、'win32'(Windows)、'linux' 等。

  7. process.version:当前运行的 Node.js 版本字符串。

  8. process.versions:一个对象,包含 Node.js 及其依赖的版本信息。

  9. process.arch:当前运行的操作系统 CPU 架构,例如 'x64''arm' 等。

  10. process.release:包含 Node.js 相关版本和构建元数据的对象。

  11. process.title:当前进程的名称,可以被修改。

  12. process.configNode.js 构建配置选项的对象。

  13. process.execPath:启动当前进程的 Node.js 可执行文件的绝对路径。

  14. process.execArgv:启动当前进程时传给 Node.js 的命令行选项的数组。

js
console.log(process)

3.methods

process 对象中常用的可执行方法:

  1. process.cwd():返回 Node.js 进程的当前工作目录。

  2. process.chdir(directory):更改 Node.js 进程的当前工作目录。

  3. process.memoryUsage():返回一个对象,表示 Node.js 进程的内存使用情况。

  4. process.uptime():返回 Node.js 进程的运行时间(以秒为单位)。

  5. process.hrtime([time]):返回高分辨率的实时时间,作为一个 [seconds, nanoseconds] 数组。如果传入 time 参数,则返回与该时间的差值。

  6. process.nextTick(callback):在当前操作完成之后立即执行一个回调函数。

  7. process.abort():使 Node.js 进程立即以非 0 的退出码终止。

  8. process.emitWarning(warning[, options]):发出一个自定义警告,可以指定警告消息和选项。

  9. process.kill(pid[, signal]):向指定的进程 ID (pid) 发送信号,可以用来终止进程。

  10. process.exit([code]):以指定的退出码退出 Node.js 进程。如果不指定 code,默认退出码为 0

  11. process.on(eventName, listener):为 process 对象的事件添加监听器,例如 exituncaughtException 等事件。

  12. process.removeListener(eventName, listener):移除指定事件的监听器。

  13. process.setUncaughtExceptionCaptureCallback(callback):设置一个回调函数,以捕获未捕获的异常。

  14. process.send(message[, sendHandle[, options]][, callback]):如果 Node.js 进程是通过 child_process.fork() 创建的子进程,可以使用此方法向父进程发送消息。

  15. process.disconnect():如果 Node.js 进程是通过 child_process.fork() 创建的子进程,断开与父进程的 IPC 通道。

4.Exit Codes

Node.js 进程的退出码(Exit Codes)可以帮助判断进程的终止原因。以下是一些常见的退出码及其含义:

  1. 0 - 正常退出(Success):进程成功完成,没有发生错误。

  2. 1 - 一般性错误(Uncaught Fatal Exception):未捕获的致命异常导致进程退出。

  3. 3 - 内部 JavaScript 解析错误(Internal JavaScript Parse Error):JavaScript 源代码无法解析。

  4. 4 - 内部 JavaScript 评估失败(Internal JavaScript Evaluation Failure):JavaScript 代码在解析后无法执行。

  5. 5 - 致命的 V8 错误(Fatal Error):V8 引擎遇到致命错误(通常与 V8 内部机制有关)。

  6. 6 - 非函数的异常处理程序(Non-function Internal Exception Handler):异常处理机制设置错误。

  7. 7 - 内部异常处理失败(Internal Exception Handler Run-Time Failure):在处理异常时发生失败。

  8. 9 - 无效的参数(Invalid Argument):传递给 Node.js 的参数无效或不合法。

  9. 10 - 内部 JavaScript 运行时失败(Internal JavaScript Run-Time Failure):JavaScript 引擎在运行时遇到错误。

  10. 12 - 无效的调试参数(Invalid Debug Argument):启动时传递了无效的调试选项。

  11. 128 + 信号编号 - 由于接收到信号而退出:进程因接收到信号而退出,信号编号加上 128 作为退出码。例如,SIGINT 信号的编号是 2,则进程接收到 SIGINT 信号时的退出码为 130 (128 + 2)。

  12. 137 - 因 SIGKILL 信号被杀死(例如使用 kill -9 命令):通常用于强制终止进程。

  13. 139 - 段错误(Segmentation Fault):由于访问了无效的内存地址导致的崩溃。

  14. 143 - 因 SIGTERM 信号被终止:一般用于正常终止进程。

js
console.log('a')

process.exit(1)

console.log('b')