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

news2024/11/24 21:00:45

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.coloradmin.cn/o/1206873.html

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

相关文章

Webpack 性能优化 二次编译速度提升3倍!

本文作者为 360 奇舞团前端开发工程师 Rien. 本篇文章主要记录 webpack 的一次性能优化。 现状 随着业务复杂度的不断增加,项目也开始变得庞大,工程模块的体积也不断增加,webpack 编译的时间也会越来越久,我们现在的项目二次编译的…

医院安全(不良)事件管理系统源码 不良事件报告全套源码

不良事件管理系统是一种专为企业或组织设计的软件工具,用于跟踪、记录和管理不良事件。该系统可以有效地整合不良事件的收集、分类、分析和报告,帮助企业及时识别和处理不良事件,从而降低风险和损失。通过实时监控和自动化报告,该…

JavaScript数据类型和存储区别

目录 一、原始数据类型 二、引用数据类型 三、存储区别 四、常见错误 JavaScript是一种动态类型语言,这意味着变量可以在程序执行过程中改变其数据类型。了解JavaScript中的数据类型和它们的存储方式对于编写高效和可维护的代码至关重要。 在JavaScript中&…

世界互联网大会|云轴科技ZStack受邀分享云原生超融合

11月8日至10日“世界互联网大会乌镇峰会”在浙江嘉兴的乌镇开幕,大会的主题为“建设包容、普惠、有韧性的数字世界——携手构建网络空间命运共同体”,全球各界代表就热点焦点问题展开讨论,反映产业各界对互联网发展的前瞻思考,引领…

knife4j集成Swagger

knife4j集成 配置knife4j 第一步: 导入knife4j对应的maven坐标,knife4j是为MVC框架集成Swagger生成API文档的增强解决方案 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><ver…

中国平安:短期面临两项重大风险,长期具有增长潜力

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 中国平安面临的短期风险 在过去的一个月里&#xff0c;中国平安(02318)(601318)的股价已经下跌了16.4%&#xff0c;而同期标普500指数则上涨了1.3%。所以&#xff0c;猛兽财经认为&#xff0c;中国平安近期的股价疲软&…

python数据结构与算法-02_数组和列表

线性结构 本节我们从最简单和常用的线性结构开始&#xff0c;并结合 Python 语言本身内置的数据结构和其底层实现方式来讲解。 虽然本质上数据结构的思想是语言无关的&#xff0c;但是了解 Python 的实现方式有助于你避免一些坑。 我们会在代码中注释出操作的时间复杂度。 数…

nginx之使用与配置教程

目录 简介 优点 安装 目录结构 nginx.conf配置文件结构 server虚拟主机配置 listen server_name location root index try_files proxy_pass 使用 反向代理 配置语法 常用指令 proxy_pass proxy_set_header proxy_redirect 负载均衡 负载均衡策略 轮询&…

发现一款好用的制作企业杂志网站/强推

除了展示企业的信息&#xff0c;企业杂志还可以成为员工展示自我、表达情感的电子书。你可以鼓励员工分享他们的故事、他们的想法、他们的创新。这样&#xff0c;企业杂志就成为了一个充满活力和创新的空间。 那么如何制作一本企业杂志呢&#xff1f;给大家推荐一款实用的网站&…

Hadoop3.3.4分布式安装

安装前提&#xff1a;已经配置好java环境&#xff0c;所有机器之间ssh的免密登录。 注意&#xff1a;下文中的flinkv1、flinkv2、flinkv3是三台服务器的别名 1.集群部署规划 注意&#xff1a;NameNode和SecondaryNameNode不要安装在同一台服务器 注意&#xff1a;ResourceMan…

2013年01月09日 Go生态洞察:App Engine SDK与工作区(GOPATH)深度解析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

电机应用-编码器

目录 编码器 增量式编码器 绝对式编码器 混合式绝对式编码器 旋转编码器原理 增量式编码器原理 绝对式编码器原理 编码器基本参数 分辨率 精度 最大响应频率 信号输出形式 编码器 用来测量机械旋转或位移的传感器&#xff0c;能够测量机械部件在旋转或直线运动时的…

16岁还是街头餐厅“洗碗妹”,46岁已成美国“三院士”,华人科学家李飞飞的美国之路

昨天群里大V分享了一本书《The Worlds I See》&#xff0c;我迫不及待的下载阅读了。 16岁&#xff0c;她还是美国街头餐厅的“洗碗妹”。 46岁&#xff0c;她已成为美国三大权威科学院院士、斯坦福教授、当代科技领军人物榜上&#xff0c;与乔布斯齐名的人物。 她就是华裔女科…

为什么要用kubernetes?

第一章 kubernetes介绍 本章节主要介绍应用程序在服务器上部署方式演变以及kubernetes的概念、组件和工作原理。 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物…

requestAnimationFrame是什么?介绍 如何使用?适用场景?有哪些缺点和优点,兼容性怎么样?

文章目录 前言是什么&#xff1f;如何使用适用场景优点和缺点兼容性后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技…

12周年庆|一文回顾思迈特十二年大事记

白驹过隙&#xff0c;转眼思迈特软件迎来了十二岁生日&#x1f382; 在中华文化里&#xff0c;十二是一个轮回&#xff0c;十二寓意着圆满。圆满代表着一种从容、自信、充满能量的状态。 任何一种圆满的状态&#xff0c;都不是一蹴而就的&#xff0c;都曾经经历过千锤百炼的磨砺…

BGP路由控制实验

目录 一、实验拓扑 二、实验需求 三、实验步骤 1、IP地址配置 2、As 200 内部配置OSPF 3、建立BGP邻居关系 4、宣告网段&#xff0c;在BGP中传递网段 5、通过修改MED 使 R1 到达 192.168.2.0/24 网段的路由经过 R3 6、通过修改Preferred-value 属性&#xff0c;使 R4 …

PyCharm鼠标控制字体缩放

File->Settings->Keymap 右边搜索栏输入increase(放大)&#xff0c;可以看到下面出现increase Font Size(放大字体尺寸)&#xff0c;双击。 双击后出现几个选项&#xff0c;选择Add Mouse Shortcut,会出现一个页面给录入动作。 按住Ctrl同时鼠标向上滚动&#xff0c;该动…

从零开始,掌握Nacos搭建的艺术(单点、集群、docker-compose)

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 从零开始&#xff0c;掌握Nacos 前言&#xff1a;前提&#xff1a;建表语句第一&#xff1a; 单节点搭建&#xff1a;第二&#xff1a; 集群搭建&#xff1a;第三&#xff1a…

使用VScode编译betaflight固件--基于windows平台

使用VScode编译betaflight固件--基于windows平台 1、使用git克隆betaflight的开源代码2、betaflight的代码框架分析&#xff1a;3、配置编译环境&#xff1a;4、VScode上编译 betaflight不仅可以在LInux上进行编译也可以在Windows上编译&#xff0c;本文主要介绍在windows平台上…