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

这篇具有很好参考价值的文章主要介绍了【第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 事件会被触发,我们可以在事件处理函数中执行一些异步操作。
【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象,Nodejs开发实战教程,node.js,vim,编辑器

  • ‘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 对象属性:

  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

【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象,Nodejs开发实战教程,node.js,vim,编辑器

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);;

【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象,Nodejs开发实战教程,node.js,vim,编辑器文章来源地址https://www.toymoban.com/news/detail-754229.html

到了这里,关于【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue.js+Node.js开发实战就业反馈小程序-培训机构学员

     💖💖更多项目资源,最下方联系 IT实战课堂 ✨✨✨✨✨✨ 博主拥有多年的T技术研发项目架构和教学经验,CSDN/51CTO/腾讯课堂等平台优质作者、高级讲师,培训机构联合创始人!现专注项目定制Java、小程序、前端网页、Python、App、NodeJs、PHP、微服务、NET等远程部署、售后答

    2024年02月20日
    浏览(47)
  • 【Nodejs】Node.js简介

    Node 的重要性已经不言而喻,很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外,目前最为流行的 Web 开发模式是前后端分离的形式,即前端开发者与后端开发者在自己喜欢的 IDE 上独立进行开发,然后通

    2024年02月12日
    浏览(44)
  • 【Node.js实战】一文带你开发博客项目之登录(前置知识)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力n年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝

    2024年02月21日
    浏览(37)
  • 【Node.js实战】一文带你开发博客项目(使用假数据处理)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿 offer(秋招) 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝Node.js 🌕 个人推广:每篇文章最下方都有加入方式,旨在

    2024年02月02日
    浏览(40)
  • 【Node.js实战】一文带你开发博客项目(API 对接 MySQL)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力n年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝

    2024年02月02日
    浏览(49)
  • Node.Js篇 NodeJs使用MongoDB

    目录 介绍 概念解析                   安装 启动时注意事项 NodeJs操作Mongo 介绍 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。                                                           

    2024年02月09日
    浏览(40)
  • 【Node.js从基础到高级运用】二、搭建开发环境

    在上一篇文章中,我们介绍了Node.js的基础概念。现在,我们将进入一个更实际的阶段——搭建Node.js的开发环境。这是每个Node.js开发者旅程中的第一步。接下来,我们将详细讨论如何安装Node.js和npm,以及如何使用版本管理工具来维护不同的Node.js版本。 Node.js的安装过程相当简

    2024年03月14日
    浏览(37)
  • Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(上)

    今天久违的更新一下关于 Vue 的文章了,本篇文章是基于 Vue3 + Node.js + ElementPlus 的实战项目分享,实战内容包括有打印插件 Print.js 的使用,以及关于 ElementPlus 中的 el-table 与 el-pagination 的深入使用。本次项目以文章(axios 实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联

    2024年02月06日
    浏览(35)
  • Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(下)

    在进入文章的正文之前,我们先一起了解一下关于 CSDN 今年的 1024 程序员节。与此同时这也是我在 CSDN 参与的第二个 1024 程序员节日,转眼间也快写博客两年时间,去年很遗憾没有去到深圳(疫情原因)线下参加这个有趣而充实的峰会。今年没有特殊情况的话一定会如约而至

    2024年02月06日
    浏览(37)
  • 【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力n年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2Vue3项目实战 🥝

    2024年01月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包