当前位置: 首页 > news >正文

Nodejs内置模块process

文章目录

    • 内置模块process
      • 写在前面
      • 1. arch()
      • 2. cwd()
      • 3. argv
      • 4. memoryUsage()
      • 5. exit()
      • 6. kill()
      • 7. env【最常用】

内置模块process

写在前面

process是Nodejs操作当前进程和控制当前进程的API,并且是挂载到globalThis下面的全局API。

下面是process的一些常用API:

序号API作用
1process.arch跟之前的os.arch()一样 获取操作系统位数【cpu架构】
2process.cwd()返回当前端工作目录 和__dirname类似 但是esm模式下是用不了__dirname的 可以用cwd()代替
3process.argvargv属性返回一个数组,其中包含启动Node.js进程时传递的命令行参数。第一个元素将是execPath。第二个元素是要执行的JavaScript文件的路径。剩下的元素将是任何附加的命令行参数。
4process.memoryUsage返回内存信息
5process.exit()实现进程强制退出
6process.kill()和process.exit()类似 杀死进程 需要一个参数pid 即进程id 使用process.pid获取
7process.env【最常用】获取操作系统所有的环境变量 最常用的一个属性

1. arch()

process.arch() 跟之前学的os.arch()一样,用于获取操作系统位数【或者说是cpu架构】。

const process = require("process");
console.log(process.arch); // x64

2. cwd()

process.cwd() 返回当前端工作目录,和__dirname类似,但是esm模式下是用不了__dirname的,这种情况下就可以使用process.cwd()代替它来使用了。

const process = require("process");
console.log(__dirname); // C:\Users\22706\Desktop\temp
console.log(process.cwd()); // C:\Users\22706\Desktop\temp

3. argv

process.argv属性会返回一个数组,其中包含启动Node.js进程时传递的命令行参数。第一个元素将是execPath。第二个元素是要执行的JavaScript文件的路径。剩下的元素将是任何附加的命令行参数。

const process = require("process");
console.log(process.argv); // ['D:\\nodejs\\node.exe', 'C:\\Users\\22706\\Desktop\\temp\\process.js']
// 这里测试输入命令行的额外参数 --version 如果有--version就输出1.0.0 否则输出'无'
console.log(process.argv.includes("--version") ? "1.0.0" : "无");

代码测试结果如下:
在这里插入图片描述
可以看到只要命令增加了额外的参数,使用process.argv输出的数组的第三个元素开始将会是命令增加的额外参数值。

4. memoryUsage()

process.memoryUsage()会返回电脑内存相关的信息。

const process = require("process");
console.log(process.memoryUsage());/**
{ 运行结果rss: 21495808,  // 常驻集大小 物理内存的存量heapTotal: 5263360,  // v8给我们分配的堆内存的总大小 包括未使用的内存heapUsed: 4609688,  // 已经使用的内存external: 347074,  // 外部的内存 C C++使用的arrayBuffers: 19406  // 二进制的总量
}
*/

5. exit()

process.exit() 实现进程的强制退出。

比如有一个5s的定时器,5s结束会自动退出进程,另外有个2s的定时器,2s的定时器的回调内调用process.exit()实现强制退出,则不会再等待5s的定时器结束再结束进程,测试代码如下:

const process = require("process");
setTimeout(() => {console.log(5);  // 输出5
}, 5000);setTimeout(() => {console.log("进程退出了");process.exit(); // 强制退出进程 不再等待上一个定时器输出5
}, 2000);

测试结果如下:
在这里插入图片描述
可以看到进程并没有等待5s后输出结果5,而是2s后输出进程退出了。

另外,process还可以通过Apion监听进程退出:

const process = require("process");
setTimeout(() => {console.log(5);
}, 5000);setTimeout(() => {console.log("进程退出了");process.exit(); // 强制退出进程 不再等待上一个定时器输出5
}, 2000);process.on("exit", () => {// 监听进程结束console.log("进程退出了");
});

代码运行结果如下:
在这里插入图片描述

6. kill()

process.kill()process.exit()类似,杀死进程,它需要一个参数pid, 即进程id,使用process.pid获取进程id。

const process = require("process");
setTimeout(() => {console.log(5);
}, 5000);setTimeout(() => {process.kill(process.pid); // 强制退出进程 不再等待上一个定时器输出5
}, 2000);

运行结果和process.exit()一样。

7. env【最常用】

process.env用于获取操作系统所有的环境变量,它是process模块最常用的一个属性。

并且可以通过它修改环境变量,但是修改只在当前进程生效,并不会真正影响系统的环境变量。

const process = require("process");
console.log(process.env);  // 输出一大堆电脑配好的环境变量
console.log(process.env.VSCODE_INJECTION); // 1
process.env.VSCODE_INJECTION = "2270633333";  // 测试修改环境变量
console.log(process.env.VSCODE_INJECTION); // 2270633333

学习环境变量有什么用呢?

最常见的用途就比如:根据环境变量区分是开发环境还是生产环境 从而判断接口请求是使用http协议还是https协议

我们经常使用webpack vite等构建工具都会下载一个第三方库 cross-env 通过这个第三方库设置对应环境变量。

安装完成后我们就可以在package.json中设置对应脚本:

"scripts": {"dev": "cross-env NODE_ENV=development node process.js","build": "cross-env NODE_ENV=production node process.js"
}

上面的脚本实现了运行脚本npm run dev后,cross-env会设置名为NODE_ENV的环境变量值为development,并运行脚本node process.js在node环境下运行上面的process.js文件,运行npm run build同理,实现了运行不同脚本从而通过NODE_ENV来设置不同环境变量值,当然,环境变量名不一定都得取NODE_NEV,可以自定义随意取。

下面我们执行脚本npm run dev测试结果如下:

在这里插入图片描述

cross-env的原理就是如果是windows就调用set,如果是posix就调用export设置环境变量:

set NODE_ENV=production  # windows
export NODE_ENV=production  # posix

因此,使用第三方模块cross-env不需要考虑兼容性问题。

参考博客:https://xiaoman.blog.csdn.net/article/details/132654000?spm=1001.2014.3001.5502

相关文章:

Nodejs内置模块process

文章目录 内置模块process写在前面1. arch()2. cwd()3. argv4. memoryUsage()5. exit()6. kill()7. env【最常用】 内置模块process 写在前面 process是Nodejs操作当前进程和控制当前进程的API,并且是挂载到globalThis下面的全局API。 下面是process的一些常用AP…...

Vue2 修改了数组哪些方法,为什么

1、Vue2 修改了以下数组方法 push()、pop()、shift()、unshift()、splice()、sort()、reverse() 这些方法都是可以改变原数组的。 为了实现数据响应式更新,Vue2 在这些方法中添加了特定的代码,以便通知 Vue 视图更新数据 举个例子,当我们…...

均值滤波算法及例程

均值滤波算法是一种简单的图像滤波方法,它使用一个固定大小的滤波器来平滑图像。该滤波器由一个矩形的窗口组成,窗口中的像素值取平均值作为中心像素的新值。以下是均值滤波算法的步骤: 定义滤波器的大小(窗口大小)&a…...

拥抱产业发展机遇 兑现5G商业价值

[阿联酋,迪拜,2023年10月10日] 今天,以“将5G-A带入现实”为主题的2023全球移动宽带论坛在迪拜举行。本次大会上,华为轮值董事长胡厚崑与GSMA总干事Mats Granryd围绕“5G产业进程与发展”连线对话。胡厚崑指出,“技术发…...

Layui合计自定义列

需求:第四列通过计算:27除以220 正常的汇总,增加这个属性就行 特殊的列,需要特殊处理 获取合计行:$(".layui-table-total div.layui-table-cell"); 获取某列的值:$($(".layui-table-total …...

Tomcat自启动另一种方法

Tomcat自启动另一种方法 问题: 不知道怎么回事,好几台电脑都可以开机自启动tomcat,正常运行项目。一样的配置一样的操作流程,偏偏要运行的机器开机自启动后,项目不能运行,手动重启tomcat又可以用了。网上…...

C语言,标志法

标志法通常用来检查或者进行过程中一些状态变化。 有一些是为了观察变化&#xff0c;举出一些以往代码的例子&#xff1a; 1.找出一串数字中没有重复出现过的数字 #include <stdio.h> int main() {int arr[1000] { 0 };int n 0;scanf("%d", &n);int i…...

适合自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

CTF比赛是快速提升网络安全实战技能的重要途径&#xff0c;已成为各个行业选拔网络安全人才的通用方法。但是&#xff0c;本书作者在从事CTF培训的过程中&#xff0c;发现存在几个突出的问题&#xff1a; 1&#xff09;线下CTF比赛培训中存在严重的 “最后一公里”问题 &#…...

软件设计师学习笔记12-数据库的基本概念+数据库的设计过程+概念设计+逻辑设计

1.数据库的基本概念 1.1数据库的体系结构 1.1.1常见数据库 ①集中式数据库 数据是集中的&#xff1b;数据管理是集中的 ②C/S结构 客户端负责数据表服务&#xff1b;服务器负责数据库服务&#xff1b;系统分前后端&#xff1b;ODBC、JDBC ③分布式数据库 物理上分布、逻…...

distcc分布式编译

distcc https://gitee.com/bison-fork/distcc.git 下载工具链 mingw&#xff0c;https://www.mingw-w64.org/downloads/#w64devkitperl&#xff0c;https://strawberryperl.com/releases.html免安装zip版本&#xff0c;autoconf等脚本依赖perlautoconf、automake&#xff0c…...

Java面试题-0919

集合篇 Java面试题-集合篇HashMap底层实现原理概述javaSE进阶-哈希表 为了满足hashmap集合的不重复存储&#xff0c;为什么要重写hashcode和equals方法&#xff1f; 首先理解一下hashmap的插入元素的前提&#xff1a; hashmap会根据元素的hashcode取模进行比较&#xff0c;当…...

WPF列表性能提高技术

WPF列表性能提高技术 WPF数据绑定系统不仅需要绑定功能&#xff0c;还需要能够处理大量数据而不会降低显示速度和消耗大量内存&#xff0c;WPF提供了相关的控件以提高性能&#xff0c;所有继承自ItemsControl的控件都支持该技术。 虚拟化 UI虚拟化是列表仅仅为当前显示项创建…...

掌握 BERT:自然语言处理 (NLP) 从初级到高级的综合指南(2)

BERT的先进技术 当您精通 BERT 后&#xff0c;就该探索先进技术以最大限度地发挥其潜力。在本章中&#xff0c;我们将深入研究微调、处理词汇外单词、领域适应&#xff0c;甚至从 BERT 中提取知识的策略。 微调策略&#xff1a;掌握适应 微调 BERT 需要仔细考虑。您不仅可以微调…...

【算法优选】 二分查找专题——贰

文章目录 &#x1f60e;前言&#x1f332;[山脉数组的峰顶索引](https://leetcode.cn/problems/peak-index-in-a-mountain-array/)&#x1f6a9;题目描述&#xff1a;&#x1f6a9;算法思路&#x1f6a9;代码实现&#xff1a; &#x1f334;[寻找峰值](https://leetcode.cn/pro…...

SQL 的优化

SQL 优化是指对数据库查询语句进行优化&#xff0c;以提高查询性能和效率。下面列出了一些常见的 SQL 优化技巧&#xff1a; 1、索引优化 &#xff08;1&#xff09;使用适当的索引来加速查询操作。在频繁用于查询的列上创建索引&#xff0c;特别是在 WHERE 条件、JOIN 条件和…...

华为云云耀云服务器L实例评测|华为云上的CentOS性能监测与调优指南

目录 引言 ​编辑1 性能调优的基本要素 2 性能监控功能 2.1 监控数据指标 2.2 数据历史记录 2.3 多种统计指标 3 性能优化策略 3.1 资源分配 3.2 磁盘性能优化 3.3 网络性能优化 3.4 操作系统参数和内核优化 结论 引言 在云计算时代&#xff0c;性能优化和调优对于…...

Go If流程控制与快乐路径原则

Go if流程控制与快乐路径原则 文章目录 Go if流程控制与快乐路径原则一、流程控制基本介绍二、if 语句2.1 if 语句介绍2.2 单分支结构的 if 语句形式2.3 Go 的 if 语句的特点2.3.1 分支代码块左大括号与if同行2.3.2 条件表达式不需要括号 三、操作符3.1 逻辑操作符3.2 操作符的…...

yolov8 strongSORT多目标跟踪工具箱BOXMOT

1 引言 多目标跟踪MOT项目在Github中比较完整有&#xff1a;BOXMOT &#xff0c; 由mikel brostrom提供。在以前的版本中&#xff0c;有yolov5deepsort&#xff08;版本v3-v5&#xff09;&#xff0c; yolov8strongsort&#xff08;版本v6-v9&#xff09;&#xff0c;直至演变…...

如何开发一款跑酷游戏?

跑酷游戏&#xff08;Parkour Game&#xff09;是一种流行的视频游戏类型&#xff0c;玩家需要在游戏中控制角色进行极限动作、跳跃、爬墙和各种动作&#xff0c;以完成各种挑战和任务。如果你有兴趣开发一款跑酷游戏&#xff0c;以下是一些关键步骤和考虑事项&#xff1a; 游…...

使用宝塔面板在Linux上搭建网站,并通过内网穿透实现公网访问

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板&#xff0c;它支持Linux/Windows系统&#xff0c;我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...