Node.js 中的 os 模块学习
声明
本文由我个人参考Node.js官方文档撰写,未使用AI生成(除极少数地方外)。
os模块非常简单,提供了一些操作系统的信息。
没有什么值得学习的地方,AI时代这些纯记忆的东西交给AI就行。
我们需要做的是看懂如下代码和代码的运行结果。
import os from "node:os";
console.log("操作系统:", os.version());
console.log("内核类型:", os.type());
console.log("内核版本:", os.release());
console.log("CPU架构:", os.machine());
console.log("Node.js编译平台:", os.platform());
console.log("Node.js编译架构:", os.arch());
console.log("Node.js字节序:", os.endianness() === "LE" ? "小端序" : "大端序");
console.log("CPU信息:", os.cpus().at(0));
console.log("系统推荐的并行任务数量:", os.availableParallelism());
console.log("终止符:", os.EOL === "\n" ? "LF" : "CRLF");
console.log("内存总量:", (os.totalmem() / 1024 / 1024 / 1024).toFixed(2), "GB");
console.log("可用内存:", (os.freemem() / 1024 / 1024 / 1024).toFixed(2), "GB");
console.log("主机名:", os.hostname());
console.log("系统启动时间:", os.uptime(), "秒");
console.log("系统负载值:", os.loadavg());
console.log("用户信息", os.userInfo());
console.log("HOME目录:", os.homedir());
console.log("临时文件目录:", os.tmpdir());
console.log("空设备路径:", os.devNull);
console.log("当前进程优先级:", os.getPriority());
// 因为太长了这个先注释掉
// console.log("网络接口:",os.networkInterfaces());
// console.log("操作系统常量:",os.constants);
运行结果
这是在我的Ubuntu上的输出结果
cxx@springmorning:$ node main.mts
操作系统: #24-Ubuntu SMP PREEMPT_DYNAMIC Sun Jun 15 11:18:07 UTC 2025
内核类型: Linux
内核版本: 6.14.0-24-generic
CPU架构: x86_64
Node.js编译平台: linux
Node.js编译架构: x64
Node.js字节序: 小端序
CPU信息: {
model: '12th Gen Intel(R) Core(TM) i5-12450H',
speed: 2199,
times: { user: 148330, nice: 10, sys: 40440, idle: 1855270, irq: 0 }
}
系统推荐的并行任务数量: 12
终止符: LF
内存总量: 14.85 GB
可用内存: 9.69 GB
主机名: springmorning
系统启动时间: 2336.59 秒
系统负载值: [ 0.74, 0.8, 0.78 ]
用户信息 [Object: null prototype] {
uid: 1000,
gid: 1000,
username: 'cxx',
homedir: '/home/cxx',
shell: '/bin/bash'
}
HOME目录: /home/cxx
临时文件目录: /tmp
空设备路径: /dev/null
当前进程优先级: 0
这是在我的Windows上的输出结果
操作系统: Windows 10 Home China
内核类型: Windows_NT
内核版本: 10.0.19045
CPU架构: x86_64
Node.js编译平台: win32
Node.js编译架构: x64
Node.js字节序: 小端序
CPU信息: {
model: '13th Gen Intel(R) Core(TM) i7-13650HX',
speed: 2803,
times: { user: 5735671, nice: 0, sys: 1227953, idle: 56700093, irq: 48203 }
}
系统推荐的并行任务数量: 20
终止符: CRLF
内存总量: 15.63 GB
可用内存: 6.79 GB
主机名: DESKTOP-M5GOA1V
系统启动时间: 93604.015 秒
系统负载值: [ 0, 0, 0 ]
用户信息 [Object: null prototype] {
uid: -1,
gid: -1,
username: 'cxx',
homedir: 'C:\\Users\\cxx',
shell: null
}
HOME目录: C:\Users\cxx
临时文件目录: C:\Users\cxx\AppData\Local\Temp
空设备路径: \\.\nul
当前进程优先级: 0
辨析
有一些很像的函数,简单说说
os.machine()
和os.arch()
os.machine()
返回的是CPU架构,os.arch()
返回的是Node.js的二进制文件架构。比如我电脑是x86_64的,但下载了32位的Node.js,那么os.machine()
输出x86-64
,os.arch()
输出ia32
-
os.version()
、os.type()
、os.release()
、os.platform()
os.version()
返回的是用户友好的操作系统版本,类似uname -a
os.type()
返回的是操作系统名,比如Linux
、Windows_NT
、Darwin
,类似uname -s
os.release()
返回操作系统的发行版本号,简言之就是内核版本,类似uname -r
os.platform()
返回的是Node.js编译时的操作系统平台,该值在编译Node.js时设置,如linux
、win32
、darwin
-
os.availableParallelism()
,功能是返回程序应使用的默认并行度的估计值
设置进程优先级的函数
上述代码,我们还有一个函数没提到,是os.setPriority([pid, ]priority)
,功能是设置进程的优先级。
参数说明:
- pid(可选):目标进程的 PID(进程 ID)。默认值为 0,表示当前进程。
- priority(必需):优先级值,范围为 -20(最高)到 19(最低)。
Node.js 提供了平台无关的优先级常量os.constants.priority
,可以用来设置进程的优先级。
cxx@springmorning:$ node main.mts # 输出示例
[Object: null prototype] {
PRIORITY_LOW: 19,
PRIORITY_BELOW_NORMAL: 10,
PRIORITY_NORMAL: 0,
PRIORITY_ABOVE_NORMAL: -7,
PRIORITY_HIGH: -14,
PRIORITY_HIGHEST: -20
}