【第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.mfbz.cn/a/144752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖音直播 **** 匿名采集

2023年11月14日,弹幕消息为纯协议,可采集匿名直播间,可以采集发言,礼物,点赞,关注等匿名信息,不漏消息,所有消息均可采集 抖音直播***匿名采集2023-11-14 演示效果仅演示了发言类型的…

java入门,从CK到一部分数据到mysql

一、需求 需要从生产环境ck数据库导数据到mysql,数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库,第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份,或者将需要导出的数据建一张新的表了…

Vscode编辑器保存时一直提示正在保存“index.vue”: 正在从“‘Vetur‘, ‘ESLint‘”获取代码操作

问题描述: Vscode在使用了Vetur, ESLint两个扩展配置了vue文件语法检查,保存时自动fix,经常会出现卡死,通知内容如下: 正在保存“index.vue”: 正在从“Vetur, ESLint”获取代码操作; 解决办法&#xff1a…

【MongoDB】索引 – 通配符索引

一、准备工作 这里准备一些数据 db.books.drop();db.books.insert({_id: 1, name: "Java", alias: "java 入门", description: "入门图书" }); db.books.insert({_id: 2, name: "C", alias: "c", description: "C 入…

APUS与深圳大学大数据国家工程实验室联合训练开源中文大模型

日前,APUS与深圳大学大数据系统计算技术国家工程实验室(以下简称“国家工程实验室”)达成战略合作。双方集成各自优势联合开发、开源高性能中文多模态大模型Linly-Chinese-LLaMA-2-70B。该模型将更加适配中文服务场景,计划于2024年…

软文推广怎么做才能起效?媒介盒子为你解答

随着软文推广的逐渐,越来越多的企业开始注重如何推广才能起效,软文作为一种柔性的广告方式能够自然融入用户使用场景中,提高广告的曝光率和转化率,然后软文推广并不是保证软文质量就能起效,还需要经过别的步骤&#xf…

Nacos 身份认证绕过漏洞(已修复)

Nacos存在权限绕过漏洞,攻击者利用该漏洞可以未授权访问用户列表(我的Nacos版本为1.2.1) 漏洞复现:http://127.0.0.1:8849/nacos/v1/auth/users?pageNo1&pageSize9 利用漏洞复现问题http://127.0.0.1:8849/nacos/v1/auth/us…

Vue3源码reactive和readonly对象嵌套转换,及实现shallowReadonly

前言 官方文档中对reactive的描述: 响应式转换是“深层”的:它会影响到所有嵌套的属性。一个响应式对象也将深层地解包任何 ref 属性,同时保持响应性。 官方文档中对readonly的描述: 只读代理是深层的:对任何嵌套属性的访问都将是…

数字化时代的甜蜜梦境,拓世AI女友带你探索全新互动体验

只要花42块钱,就能被6个大美女疯狂倒追,听起来像科幻文对吧? 最近,一款真人互动游戏《完蛋!我被美女包围了!》(以下简称《完蛋》)爆火,不仅霸榜Steam国内畅销榜首&#…

python的高性能web应用的开发与测试实验

引言 python语言一直以开发效率高著称,被广泛地应用于自动化领域: 测试自动化运维自动化构建发布自动化 但是因为其也具有如下两个特征: 解释型语言GIL全局解释器锁 前者导致其性能天然就被编译型语言在性能上落后了许多。而后者则在多核…

美国站群服务器IP如何设置分配?

​  在配置美国站群服务器时,IP的分配是一个重要的步骤。下面将介绍一些关于美国站群服务器IP分配的相关知识。 独享IP和虚拟IP 在租用美国站群服务器之前,我们需要了解提供的IP是独享的还是虚拟的。独享IP指每个网站都有独立的IP地址,而虚…

如何制作出高级感满满的的照片书

随着数码相机的普及,越来越多的人喜欢将生活中的点滴美好记录下来,其中照片书就是一种非常受欢迎的方式。但是,如何制作出高级感满满的“照片书”呢?今天,我们就来分享几个小技巧,帮助你轻松打造出令人惊艳…

VEX —— Half-edges

目录 一,概述 二,等效 三,函数 在一些VEX函数,可将边看成为每个面非共享的半边; 一,概述 在houdini,边通常被视为面之间无方向且共享的,然而,对于一些任务&#xff08…

【云计算网络安全】DDoS 攻击类型:什么是 ACK 洪水 DDoS 攻击

文章目录 一、什么是 ACK 洪水 DDoS 攻击?二、什么是数据包?三、什么是 ACK 数据包?四、ACK 洪水攻击如何工作?五、SYN ACK 洪水攻击如何工作?六、文末送书《AWD特训营》内容简介读者对象 一、什么是 ACK 洪水 DDoS 攻…

玩转ChatGPT:ARIMA模型定制GPT-1.0

一、写在前面 好久不更新咯! OpenAI又推出了GPT的一系列重大更新,其中GPTs深得我心啊。 GPTs允许用户创建自定义的ChatGPT版本,以满足自己各种特定需求。其核心理念在于,用户可以为不同的场景和任务创建定制化的ChatGPT。这意味…

超详细!必看!!STM32--系统滴答SysTick

一、SysTick是什么? Systick定时器是一个24bit的倒计时(向下计数)定时器,功能就是实现简单的延时。 SysTick 是一种系统定时器,通常在嵌入式系统中使用。它是 ARM Cortex-M 处理器的一个特殊定时器,用于提…

制作这种在线宣传画册,可轻松收获客户!

制作企业宣传画册,首先要了解企业制作宣传画册的需求以及展示方向,如今互联网时代,宣传画册的制作也应该要创新,而制作一本在线电子宣传画册用于线上宣传是非常有必要的。如何制作呢? 我们 可以使用FLBOOK平台在线制作…

CVE-2023-2766:泛微E-Office信息泄露漏洞复现 [附POC]

文章目录 泛微E-Office信息泄露漏洞(CVE-2023-2766)复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 泛微E-Office信息泄露漏洞(CVE-2023-2766)复现 [附POC] 0x01 前言 免责声明:请勿利用…

WGCLOUD的特点整理

做运维工作很多年了,项目中用过不少的运维软件工具,今天整理下WGCLOUD的特点(优点) 首先WGCLOUD是完全免费的 部署使用:部署简单方便,上手容易,几乎没有学习成本,对新手友好 文档…

OSG项目:模仿Ventsim制作三维矿井智能通风系统

1、效果 2、计划内容 1) 三维场景的加载显示;已实现 2)矿井巷道建模及纹理;已实现 3)矿井基础数据采集及修正;已实现 4)通风网络解算算法;已实现 5)通风设备及设施模型制作;未实现 6)风流模拟效果 ;已实现 7)火灾模拟效果;未实现
最新文章