nodejs提供了os模块,用于获取当前操作系统相关的信息和状态,包括软件、硬件和程序状态等等。
应用场景
通常在一般的Web应用开发中,这个模块被涉及和使用的情况并不多。笔者接触到的,可能的使用场景包括:
- 根据当前应用或者用户的启动目录,配置相关环境变量和配置信息
这个比较常用。比如根据CPU数量,确定执行群集的子进程数量;根据当前文件夹,确定数据或者工作文件夹的位置;根据当前操作系统和版权,检查系统需求和执行条件;获取和使用临时文件夹;根据操作系统选择外部命令或者程序等等。
- 监控当前应用或者系统的运行状态
常用的如记录和分析CPU负载和内存占用等。
- 获取当前程序的信息(如PID)用于外部管理和控制
针对这些应用需求,OS模块可以提供的方法和功能,主要有以下几类。
OS模块
在nodejs应用中,可以像一般的模块一样,引用和使用os模块。
const os = require("node:os");
然后就可以查看os模块的结构、组成,以及相关的属性和方法了。
> os
{
arch: [Function: arch] {
[Symbol(Symbol.toPrimitive)]: [Function (anonymous)]
},
cpus: [Function: cpus],
endianness: [Function: endianness] {
[Symbol(Symbol.toPrimitive)]: [Function (anonymous)]
},
freemem: [Function: getFreeMem] {
[Symbol(Symbol.toPrimitive)]: [Function (anonymous)]
},
getPriority: [Function: getPriority],
homedir: [Function: __node_internal_checkError] {
[Symbol(Symbol.toPrimitive)]: [Function (anonymous)]
},
hostname: [Function: __node_internal_checkError] {
[Symbol(Symbol.toPrimitive)]: [Function (anonymous)]
},
.... 以下略
我们可以看到,大致分为以下几类:
硬件信息
其中,当前硬件类型信息常用的有:
- cpus: 当前系统CPU信息,是一个CPU信息对象的数组
- networkInterfaces: 当前系统网络接口信息对象列表
- availableParallelism: 可用并行机制
- arch:CPU指令集架构
软件系统和运行环境
当前软件系统和运行环境信息常用的有:
- platform: nodejs运行时编译时的平台信息
- release: 发行版本名称
- endianness:编译时nodejs所在系统的字节序
- machine: 当前操作系统所使用的指令集架构,常见的如x86_64、arm64等
- type: 当前操作系统类型,Linux, Darwin(Mac OS),Windows_NT(windows)
- version: 当前操作系统版本
- hostname: 当前主机名称
- homedir: 当前应用用户主文件夹
- temdir: 临时文件夹路径
- constants: 操作系统相关系统级常数定义,如信号状态、优先级等等
- userInfo: 当前执行用户信息
- EOL: end of line,行终止标记, \n(Posix),\r\n(Windows)
- devNull: 当前系统空设备名, \.\nul(Windows)或者/dev/null(Posix)
系统运行状态
当前系统运行状态常用的有:
- uptime: 操作系统运行时间
- loadavg: 系统负载,定义同linux操作系统,是一个数组,分别是1、5、15分钟平均负载
- totalmem/freemem: 内存容量/可用内存
- getPriority: 当前或指定进程的优先级
设置操作系统参数:
- setPriority: 可以设置进程优先级
此外,还可能需要注意,这些信息中的很多是基于当前操作系统的系统级方法或者API获得的,可能其结果的形式和格式并不一致,后续还是需要根据不同平台做相应的处理。