Nodejs开发进阶8-操作系统

116 阅读3分钟

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获得的,可能其结果的形式和格式并不一致,后续还是需要根据不同平台做相应的处理。