【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象

process对象是一个全局对象,提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。

1.进程事件

process对象是EventEmitter类的实例,因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的process对象事件:

  • ‘exit’:当进程即将退出时触发。可以用于执行一些清理操作。

此时无法阻止事件循环退出,并且一旦所有 exit 事件的监听器都完成运行,Node.is 进程将终止。这里给出简单的示例代码。
示例代码:

process.on('exit', (code) => {console.log(`Process exited with code ${code}`);
});
  • beforeExit 当Node.s 清空其事件循环并且没有其他工作要调度时,会触发此事件。
    • 通常,Node.js进程将在没有调度工作时退出,但是在 beforeExit 事件上注册的监听器可以进行异步调用,从而导致Node.is 进程继续,beforeExit 事件会反复执行 。

    因为beforeExit 事件会在 Node.js 清空事件循环时触发,但在退出之前beforeExit 事件的处理函数中包含了一个异步操作 setTimeout,这会导致事件循环中有一个未完成的异步操作。事件循环仍然会继续,直到所有异步操作完成或被取消。

beforeExit 事件的监听器回调函数会接收到 process.exitCode(退出码)作为唯一参数。可以通过设置 process.exitCode 的值来指定进程退出时的退出码。

process.on('beforeExit', (exitCode) => {console.log('beforeExit event触发');console.log(`Exit code: ${exitCode}`);// 执行一些异步操作会导致Node.is 进程继续,beforeExit 事件会反复执行 。
//    setTimeout(() => {
//        console.log('beforeExit 异步操作');
//    }, 1000);});// 模拟异步操作setTimeout(() => {console.log('异步操作');}, 1000);// 模拟同步操作console.log('同步操作');// 设置退出码process.exitCode = 1;

在上面的示例中,我们监听了 beforeExit 事件,并在事件处理函数中打印一些信息,包括退出码。在事件循环中,先执行同步操作,然后执行异步操作。当事件循环中的所有任务执行完毕后,beforeExit 事件会被触发,我们可以在事件处理函数中执行一些异步操作。
beforeExit 事件演示

  • ‘uncaughtException’:当未捕获的异常发生时触发。可以用于捕获并处理未处理的异常。
    示例代码:

    process.on('uncaughtException', (err) => {console.error('Uncaught Exception:', err);// 执行一些处理逻辑process.exit(1); // 强制退出进程
    });
    
  • ‘SIGINT’:当用户按下Ctrl+C键时触发。可以用于捕获并处理用户的中断信号。
    示例代码:

    process.on('SIGINT', () => {console.log('Received SIGINT signal');// 执行一些处理逻辑process.exit(0); // 正常退出进程
    });
    
  • ‘SIGTERM’:当进程收到终止信号时触发。可以用于捕获并处理终止信号。
    示例代码:

    process.on('SIGTERM', () => {console.log('Received SIGTERM signal');// 执行一些处理逻辑process.exit(0); // 正常退出进程
    });
    

这些是一些常用的process对象事件,可以根据具体的需求来监听和处理相应的事件。

退出状态码

状态码名称说明
1Uncaught Fatal Exception(未捕获异常)存在未捕获异常,并且没有被域或 uncaughtException 事件处理函数处理
2Unused(保留)Bash Shell 为防内部滥用而被保留
3Internal JavaScript ParseError(内部JavaScript 分析错误)Node.js 内部的JavaScript 源代码在引导进程中导致了一个语法分析错误
4Internal JavaScript Evaluation Failure(内部JavaScript 评估失败)Node.js 内部的JavaScript 代码在引导进程中导致了一个评估失败
5Fatal Error(致命错误)V8 引擎遇到了一个致命错误,例如内存分配失败
6Non-function Internal Exception Handler(非函数内部异常处理程序)试图使用非函数对象作为异常处理程序
7Internal Exception Handler Run-Time Failure(内部异常处理程序运行时失败)异常处理程序在运行时遇到了一个错误
8Unused(保留)保留状态码
9Invalid Argument(无效参数)传递给Node.js的参数无效
10Internal JavaScript Run-Time Failure(内部JavaScript运行时失败)Node.js 内部的JavaScript 代码在运行时遇到了一个错误
12Invalid Debug Argument(无效调试参数)传递给Node.js的调试参数无效
128Signal Exits(信号退出)如果Nodejs 接收到致命的错误信号,如 SIGKILL 或 SIGHUP,那么它的退出代码将是 128 加上信号码的值。这是 POSIX的标准做法,例如,信号SIGABRT的值为6,预期的退出码将为128+6 或134

process 对象属性

process 对象是 Node.js 的全局对象之一,提供了许多属性用于控制系统的交互。以下是常用的 process 对象属性:

  1. process.argv:一个包含命令行参数的数组。第一个元素是 Node.js 的可执行文件路径,第二个元素是当前执行的 JavaScript 文件路径,后续元素是传递给脚本的命令行参数。

  2. process.env:一个包含用户环境信息的对象。可以通过该对象访问环境变量,如 process.env.HOME。

  3. process.pid:当前进程的进程 ID。

  4. process.cwd():返回当前工作目录的路径。

  5. process.platform:返回当前操作系统的平台标识符,如 ‘darwin’ 表示 macOS,‘win32’ 表示 Windows。

  6. process.exitCode:进程退出时的退出码。默认为 0,表示成功退出。

  7. process.version:Node.js 的版本号。

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

  9. process.arch:返回当前 CPU 架构,如 ‘x64’。

  10. process.title:获取或设置进程的标题。默认node

  11. process.stdin、process.stdout、process.stderr:标准输入、标准输出和标准错误流。

//argv-test.js
process.stdout.write("Hello World!" + "\n");// 将字符串输出到终端
//通过参数读取
process.argv.forEach(function(val, index, array) {console.log(index + ': ' + val);
});
console.log(process.execPath); // 获取执行路径
console.log(process.platform); // 获取平台信息

执行命令:node ./argv-test.js -a -b c,输出以下结果

Hello World!
argv-test.js
2: -a
3: -b
4: c
D:\wushaopeng\nvm\nodejs\node.exe
win32

在这里插入图片描述

process 对象的方法

process 对象提供了多种方法用于控制与系统的交互。以下是常用的 process 对象方法:

  1. process.exit([code]):退出当前进程。可选地指定退出码,默认为 0。
  2. process.on(event, listener):注册事件监听器。可以监听多种事件,如 ‘exit’、‘uncaughtException’、‘SIGINT’ 等。
  3. process.cwd():返回当前工作目录的路径。
  4. process.chdir(directory):改变当前工作目录为指定的目录。
  5. process.kill(pid[, signal]):向指定的进程发送信号。可以用于终止或控制其他进程。
  6. process.nextTick(callback):将回调函数推迟到下一个事件循环迭代中执行。常用于异步操作的回调函数。
  7. process.stdout.write(data):向标准输出流写入数据。
  8. process.stderr.write(data):向标准错误流写入数据。
  9. process.stdin.on(event, listener):监听标准输入流的事件,如 ‘data’、‘end’ 等。
  10. process.env:一个包含用户环境信息的对象。可以通过该对象访问环境变量。
  11. process.memoryUsage( ): 返回一个用于描述Node 进程内存使用情况的对象,该对象每个属
    性值的单位为字节。
console.log('当前目录: ' + process.cwd());
console.log('当前版本: ' + process.version);
const memoryUsage = process.memoryUsage();
const convertedMemoryUsage = {rss: (memoryUsage.rss / (1024 * 1024)).toFixed(2) + 'MB',heapTotal: (memoryUsage.heapTotal / (1024 * 1024)).toFixed(2) + 'MB',heapUsed: (memoryUsage.heapUsed / (1024 * 1024)).toFixed(2) + 'MB',external: (memoryUsage.external / (1024 * 1024)).toFixed(2) + 'MB',
};
console.log(convertedMemoryUsage);;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.4 Linux 软件管理

一. RPM 软件包管理器 1、软件包介绍 RPM(RedHat Package Manager)软件包:扩展名为“.rpm”。RPM本质上就是一个包,包含可以立即在特定机器体系结构上安装和运行的Linux软件。安装RPM软件包需要使用rpm命令或yum命令。 源代码软…

Linux 的端口区间及设置

在 Linux 中,端口区间分配和使用如下: 0到1023端口是系统保留的端口,由一些通用协议、应用程序及其服务使用。这些端口被标识为众所周知的端口,并且不能被用户程序使用。1024到49151端口是为用户程序保留的,通常也称为…

荧光量子效率积分球的优势是什么

荧光量子效率积分球是一种测量设备,可以用于测量荧光材料在特定波长下的量子效率。它由一个具有高朗伯特性的漫反射PTFE材料制成,具有高达99%的反射率和朗伯特性。积分球有三个开口,分别为光入射口、样品口和光出射口。光入射口设置有一准直镜…

6-8.4V双节锂电升压12V 4A 24V2A大电流升压IC

SC3671 是一款专为升压、升降压开关电源设计的专用 DC-DC 控制器芯片。 SC3671 典型应用支持 5-35V 输入电压范围。通过扩展输入供电,也可以支持 100V 以上的输入电压范围。芯片采用固定频率的 PWM 控制方式,并在轻载条件下自动降频提高转换效率。芯片…

windows10上使用Visual Studio对树莓派进行交叉编译示例

本文主要介绍通过Visual Studio对树莓派进行交叉编译的方法。 1 环境 宿主机: 系统:Windows10 开发平台:Visual Studio 2022 (我用的是社区版) VisualGDB: VisualGDB - Download (我下的试用版本) GNU工具链: Prebuilt GNU toolchain f…

Android设计模式--Builder建造者模式

一,定义 Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。 也就是将一个对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二&…

表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序

目录 表白墙引入数据库 再谈Cookie和session 得到Cookie ​编辑 设置Cooie 使用Cookie编写一个登入的小界面 表白墙引入数据库 1.先引入数据库的依赖(驱动包),5.1.49 pom.xml中,在之前的两个之前,再去添加一个 &…

【Windows 开发环境配置——NVIDIA 篇】CUDA、cuDNN、TensorRT 三件套安装

CUDA 从CUDA Toolkit Archive下载相应版本的离线安装包,这里以11.7为例。 打开安装包,在安装选项选择自定义模式,点击下一步。 在自定义安装选项中,仅选择CUDA组件(其中Nsight相关组件用于代码调试与性能分析&#xff…

c# 虚方法

c#虚方法 namespace ConsoleApp2 {/// <summary>/// 若一个实例方法的声明中含有virtual修饰符&#xff0c;则称该方法为虚方法。/// 若其中没有virtual修饰符&#xff0c;则称该方法为非虚方法///虚方法可以在派生类中重写。当某个实例方法声明包括override修饰符时&am…

HarmonyOS分布式文件系统开发指导

分布式文件系统概述 分布式文件系统&#xff08;hmdfs&#xff0c;HarmonyOS Distributed File System&#xff09;提供跨设备的文件访问能力&#xff0c;适用于如下场景&#xff1a; 两台设备组网&#xff0c;用户可以利用一台设备上的编辑软件编辑另外一台设备上的文档。平板…

Vue3中TSX的使用方式

第一步&#xff1a;安装插件 npm install vitejs/plugin-vue-jsx -D 第二步&#xff1a; 在vite.config.ts中进行引入插件和注册插件 import { fileURLToPath, URL } from node:urlimport { defineConfig } from vite import vue from vitejs/plugin-vue import vueJsx from…

CKA认证模块②-K8S企业运维和落地实战-2

CKA认证模块②-K8S企业运维和落地实战-2 K8S常见的存储方案及具体应用场景分析 k8s存储-empty emptyDir类型的Volume是在Pod分配到Node上时被创建&#xff0c;Kubernetes会在Node上自动分配一个目录&#xff0c;因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容…

从测试的角度看待南航机票bug事件

事件描述 11月8日晚间&#xff0c;多名消费者反映南方航空多条成都进出港航线票价&#xff08;不含机建燃油费&#xff09;低至10元、20元、30元不等。上述超低价机票不仅在南方航空App可以购买&#xff0c;多家在线旅游平台也都能抢到。 11月9日&#xff0c;南航官方发布公告…

计算机网络之网络体系结构

计算机网络体系结构 一、常见的计算机体系结构 1.1 OSI标准以及TCP/IP体系结构 OSI标准失败的原因&#xff1a; OSI的专家们缺乏实际经验&#xff0c;他们在完成OSI标准时没有商业驱动力OSI的协议实现起来过分复杂&#xff0c;而且运行效率很低OSI标准的制定周期太长&#x…

css:文本对齐属性vertical-align实现化学元素上标下标的显示

文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/vertical-align 语法 vertical-align: <value>;可选值&#xff1a; sub&#xff1a;使元素的基线与父元素的下标基线对齐。 super&#xff1a;使元素的基线与父元素的上标基线对齐。 text-top&#xff1a;使…

2023年行业寒冬-运维求职建议

由于前几个月裁员&#xff0c;近期到就业市场上寻找工作&#xff0c;BOSS刷了两三个月&#xff0c;都已经刷烂了&#xff0c;翻来覆去还是那几家公司在招人&#xff0c;面试也有&#xff0c;但很多面试基本就是走个流程&#xff0c;对方也直言候选人很多&#xff0c;需要多加比…

力扣题库2. 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 开…

JAVA 中集合取交集

日常工作 经常需要取两个数据集的交集。对常用的List 和Set集合做了一个测试 public static void main(String[] args) {List<Integer> list1 Lists.newArrayList();List<Integer> list2 Lists.newArrayList();Set<Integer> set3 Sets.newHashSet();Set&l…

JavaWeb篇_10——HttpServletRequest对象

HttpServletRequest对象 HttpServletRequest对象代表客户端浏览器的请求&#xff0c;当客户端浏览器通过HTTP协议访问服务器时&#xff0c;HTTP请求中的所有信息都会被Tomcat所解析并封装在这个对象中&#xff0c;通过这个对象提供的方法&#xff0c;可以获得客户端请求的所有…

基于SSM的药店药品销售系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…