【第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 事件会被触发,我们可以在事件处理函数中执行一些异步操作。
-
‘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
对象事件,可以根据具体的需求来监听和处理相应的事件。
退出状态码
状态码 | 名称 | 说明 |
---|---|---|
1 | Uncaught Fatal Exception(未捕获异常) | 存在未捕获异常,并且没有被域或 uncaughtException 事件处理函数处理 |
2 | Unused(保留) | Bash Shell 为防内部滥用而被保留 |
3 | Internal JavaScript ParseError(内部JavaScript 分析错误) | Node.js 内部的JavaScript 源代码在引导进程中导致了一个语法分析错误 |
4 | Internal JavaScript Evaluation Failure(内部JavaScript 评估失败) | Node.js 内部的JavaScript 代码在引导进程中导致了一个评估失败 |
5 | Fatal Error(致命错误) | V8 引擎遇到了一个致命错误,例如内存分配失败 |
6 | Non-function Internal Exception Handler(非函数内部异常处理程序) | 试图使用非函数对象作为异常处理程序 |
7 | Internal Exception Handler Run-Time Failure(内部异常处理程序运行时失败) | 异常处理程序在运行时遇到了一个错误 |
8 | Unused(保留) | 保留状态码 |
9 | Invalid Argument(无效参数) | 传递给Node.js的参数无效 |
10 | Internal JavaScript Run-Time Failure(内部JavaScript运行时失败) | Node.js 内部的JavaScript 代码在运行时遇到了一个错误 |
12 | Invalid Debug Argument(无效调试参数) | 传递给Node.js的调试参数无效 |
128 | Signal Exits(信号退出) | 如果Nodejs 接收到致命的错误信号,如 SIGKILL 或 SIGHUP,那么它的退出代码将是 128 加上信号码的值。这是 POSIX的标准做法,例如,信号SIGABRT的值为6,预期的退出码将为128+6 或134 |
process 对象属性
process 对象是 Node.js 的全局对象之一,提供了许多属性用于控制系统的交互。以下是常用的 process 对象属性:
-
process.argv:一个包含命令行参数的数组。第一个元素是 Node.js 的可执行文件路径,第二个元素是当前执行的 JavaScript 文件路径,后续元素是传递给脚本的命令行参数。
-
process.env:一个包含用户环境信息的对象。可以通过该对象访问环境变量,如 process.env.HOME。
-
process.pid:当前进程的进程 ID。
-
process.cwd():返回当前工作目录的路径。
-
process.platform:返回当前操作系统的平台标识符,如 ‘darwin’ 表示 macOS,‘win32’ 表示 Windows。
-
process.exitCode:进程退出时的退出码。默认为 0,表示成功退出。
-
process.version:Node.js 的版本号。
-
process.versions:一个包含 Node.js 及其依赖模块版本信息的对象。
-
process.arch:返回当前 CPU 架构,如 ‘x64’。
-
process.title:获取或设置进程的标题。默认node
-
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 对象方法:
- process.exit([code]):退出当前进程。可选地指定退出码,默认为 0。
- process.on(event, listener):注册事件监听器。可以监听多种事件,如 ‘exit’、‘uncaughtException’、‘SIGINT’ 等。
- process.cwd():返回当前工作目录的路径。
- process.chdir(directory):改变当前工作目录为指定的目录。
- process.kill(pid[, signal]):向指定的进程发送信号。可以用于终止或控制其他进程。
- process.nextTick(callback):将回调函数推迟到下一个事件循环迭代中执行。常用于异步操作的回调函数。
- process.stdout.write(data):向标准输出流写入数据。
- process.stderr.write(data):向标准错误流写入数据。
- process.stdin.on(event, listener):监听标准输入流的事件,如 ‘data’、‘end’ 等。
- process.env:一个包含用户环境信息的对象。可以通过该对象访问环境变量。
- 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);;
相关文章:

【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象
process对象是一个全局对象,提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。 1.进程事件 process对象是EventEmitter类的实例,因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的process对象事件&…...

觉非科技发布【轻地图高速NOA智驾方案】|地平线,觉非科技,MobileDrive超捷生态协作实现技术落地
11月10日,2023世界新汽车技术合作生态展期间,觉非科技正式发布了基于地平线征程系列以及MobileDrive超捷规控系统的【轻地图高速NOA智驾解决方案】。该方案首次实现了从芯片能力输出、到数据闭环建设、再到规控部署的产业生态链协作与打通,为…...

竞赛 车道线检测(自动驾驶 机器视觉)
0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…...
128. 最长连续序列
这道题最简单的想法就是排序计数,但是复杂度为O(nlogn),不符合题意 于是采用哈希表的方法 将所有数字存放在哈希表中,然后开始逐个寻找。 比如当前遍历到x,如果x-1也存在哈希表中,那就从x-1开始遍历最长连续序列&#…...
设计模式-设计原则
文章目录 设计模式-设计原则单一职责原则开闭原则里氏替换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 设计模式-设计原则 单一职责原则 单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 有时候类的功能并不…...
MongoDB基础运维
mongodb的基础概念介绍 database #数据库 collection #集合,类似于mysql中的表 filed #类似于mysql中字段 document #每行的记录 连接客户端 mongo ip:port 例如mongo 127.0.0.1:27017 mongo客户端的命…...

侧击雷如何检测预防
侧击雷是一种雷击的形式,指的是雷电从建筑物的侧面打来的直接雷击。侧击雷对高层建筑物的防雷保护提出了更高的要求,因为一般的避雷带或避雷针不能完全保护住建筑物的侧面。侧击雷可能会对建筑物的结构、设备和人员造成严重的损害,甚至引发火…...

检索搜索信息能力
(一)搜索工具的选择 谷歌 > 微信搜一搜 > 抖音等短视频 > 百度 (二)搜索方式 一,搜索内容的分类 信息类学习类工具类 二,谷歌浏览器的搜索技巧 1、“搜索内容” 限定完整出现的词 如下图搜…...

设计大咖亲授:Figma中文环境设置全攻略!
作为UI设计师,你一定很熟悉Figma,Figma是一款专注于UI/UX设计的在线协作工具,使用非常高效方便,不需要下载和安装。它只需要通过浏览器编辑,在国外很受欢迎。但是Figma对于国内的小伙伴来说,使用Figma有一定…...
华为Hcia-数通学习(更改策略)
方法:书籍视频题目训练 书籍:华为HCNA网络技术学习指南。 视频:网络工程师学习路线_哔哩哔哩_bilibili 有过一点基础。考软考网络工程师的时候做了大量笔记,回去复习了一遍。现在准备找工作了,开始学习华为认证的网…...

数据校验:Spring Validation
Spring Validation概述 在开发中,我们经常遇到参数校验的需求,比如用户注册的时候,要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式,我们会把校验的代码和真正的业务处理逻辑耦…...
CSS怎么选择除了第一个子元素外的其余同级子元素
使用 CSS 的:not()伪类选择器和:nth-child()伪类选择器 要通过CSS的代码选择某一个元素的除了第一个子元素外的其余的跟第一个子元素同级的子元素,可以结合使用CSS的:not()伪类选择器和:nth-child()伪类选择器进行选择。大致的语法如下: .parent > …...

Mac下eclipse配置JDK
目录 一、配置JDK,需要电脑下载Java并且配置环境 (1)、左上角找到“Eclipse”-->“Preferences...” (2)、找到“Java”-->“Installde JREs”-->界面显示电脑所安安装的Java;若没有需要点击“Add”进行配置 ①、选择“Standard VM”--&g…...

基于springboot实现体育场馆运营平台项目【项目源码】
基于springboot实现体育场馆运营管理系统演示 系统开发平台 在该数码论坛系统中,Eclipse能给用户提供更多的方便,其特点一是方便学习,方便快捷;二是有非常大的信息储存量,主要功能是用在对数据库中查询和编程。其功能…...

优雅的Java编程:将接口对象作为方法参数
theme: smartblue 目录 概述 在Java编程中,方法的参数传递方式通常是通过基本类型、对象引用或者集合等方式。然而,一种更加优雅且灵活的设计模式是将接口对象作为方法的参数。这种方式为我们带来了许多好处,包括降低耦合性、实现多态性和可…...

一文简单聊聊protobuf
目录 基本介绍 原理 同类对比 为什么要使用protobuf? 基本介绍 protobuf的全称是Protocol Buffer,是Google提供的一种数据序列化协议。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储…...

Unity Meta Quest 一体机开发(五):手势抓取概述
文章目录 📕教程说明📕 Oculus Integration 中的三种手势抓取方式⭐Hand Grab⭐Touch Hand Grab⭐Distance Hand Grab 此教程相关的详细教案,文档,思维导图和工程文件会放入 Seed XR 社区。这是一个高质量知识星球 XR 社区&#…...

传输层中的TCP和UPD协议
一)应用层协议简介:根据需求明确要传输的信息,明确要传输的数据格式; 应用层协议:这个协议,实际上是和程序员打交道最多的协议了 1)其它四层都是操作系统,驱动,硬件实现好了的,咱们是不需要管 2)应用层:当我…...
插入排序算法(C++版)
1、什么是插入排序 插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是将一个待排序的数组分为已排序和未排序两个部分,然后逐步将未排序的元素插入到已排序的部分,直到整个数组有序。 2、插入排序的…...
Tracking vs. No-Tracking Queries
学习链接 Tracking queries By default, queries that return entity types are tracking. A tracking query means any changes to entity instances are persisted by SaveChanges. var blog context.Blogs.SingleOrDefault(b > b.BlogId 1); blog.Rating 5; contex…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...