Skip to content

OS

[稳定: 2 - 稳定]

稳定: 2 稳定性: 2 - 稳定

源代码: lib/os.js

node:os 模块提供了与操作系统相关的实用方法和属性。 可以使用以下方式访问它:

js
import os from 'node:os';
js
const os = require('node:os');

os.EOL

已加入版本: v0.7.8

操作系统特定的行尾标记。

  • 在 POSIX 上为 \n
  • 在 Windows 上为 \r\n

os.availableParallelism()

已加入版本: v19.4.0, v18.14.0

返回程序应使用的默认并行量的估计值。 始终返回大于零的值。

此函数是 libuv 的 uv_available_parallelism() 的一个小包装器。

os.arch()

已加入版本: v0.5.0

返回编译 Node.js 二进制文件的操作系统 CPU 架构。 可能的值为 'arm''arm64''ia32''loong64''mips''mipsel''ppc''ppc64''riscv64''s390''s390x''x64'

返回值等同于 process.arch

os.constants

已加入版本: v6.3.0

包含常用的特定于操作系统的常量,用于错误代码、进程信号等。 定义的具体常量在 OS 常量中描述。

os.cpus()

已加入版本: v0.3.3

返回一个对象数组,其中包含有关每个逻辑 CPU 核心的信息。 如果没有可用的 CPU 信息,则该数组将为空,例如,如果 /proc 文件系统不可用。

每个对象上包含的属性包括:

  • model <string>
  • speed <number> (单位为 MHz)
  • times <Object>
    • user <number> CPU 在用户模式下花费的毫秒数。
    • nice <number> CPU 在 nice 模式下花费的毫秒数。
    • sys <number> CPU 在 sys 模式下花费的毫秒数。
    • idle <number> CPU 在空闲模式下花费的毫秒数。
    • irq <number> CPU 在 irq 模式下花费的毫秒数。
js
[
  {
    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
    speed: 2926,
    times: {
      user: 252020,
      nice: 0,
      sys: 30340,
      idle: 1070356870,
      irq: 0,
    },
  },
  {
    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
    speed: 2926,
    times: {
      user: 306960,
      nice: 0,
      sys: 26980,
      idle: 1071569080,
      irq: 0,
    },
  },
  {
    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
    speed: 2926,
    times: {
      user: 248450,
      nice: 0,
      sys: 21750,
      idle: 1070919370,
      irq: 0,
    },
  },
  {
    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',
    speed: 2926,
    times: {
      user: 256880,
      nice: 0,
      sys: 19430,
      idle: 1070905480,
      irq: 20,
    },
  },
]

nice 值仅适用于 POSIX。 在 Windows 上,所有处理器的 nice 值始终为 0。

os.cpus().length 不应用于计算应用程序可用的并行量。 使用 os.availableParallelism() 来实现此目的。

os.devNull

新增于: v16.3.0, v14.18.0

特定于平台的空设备文件路径。

  • Windows 上为 \\.\nul
  • POSIX 上为 /dev/null

os.endianness()

新增于: v0.9.4

返回一个字符串,标识 Node.js 二进制文件编译时所针对的 CPU 的字节序。

可能的值为 'BE' (大端) 和 'LE' (小端)。

os.freemem()

新增于: v0.3.3

以整数形式返回可用系统内存量(以字节为单位)。

os.getPriority([pid])

新增于: v10.10.0

返回由 pid 指定的进程的调度优先级。 如果未提供 pidpid0,则返回当前进程的优先级。

os.homedir()

新增于: v2.3.0

返回当前用户主目录的字符串路径。

在 POSIX 上,如果定义了 $HOME 环境变量,则使用该变量。 否则,它会使用有效 UID 来查找用户的主目录。

在 Windows 上,如果定义了 USERPROFILE 环境变量,则使用该变量。 否则,它使用当前用户的配置文件目录的路径。

os.hostname()

新增于: v0.3.3

以字符串形式返回操作系统的hostname。

os.loadavg()

添加于: v0.3.3

返回一个包含 1 分钟、5 分钟和 15 分钟平均负载的数组。

平均负载是由操作系统计算的系统活动度量,并表示为一个小数。

平均负载是一个特定于 Unix 的概念。 在 Windows 上,返回值始终为 [0, 0, 0]

os.machine()

添加于: v18.9.0, v16.18.0

返回机器类型字符串,例如 armarm64aarch64mipsmips64ppc64ppc64les390s390xi386i686x86_64

在 POSIX 系统上,机器类型由调用 uname(3) 确定。 在 Windows 上,使用 RtlGetVersion(),如果不可用,则使用 GetVersionExW()。 更多信息请参考 https://en.wikipedia.org/wiki/Uname#Examples

os.networkInterfaces()

[历史记录]

版本变更
v18.4.0family 属性现在返回一个字符串而不是一个数字。
v18.0.0family 属性现在返回一个数字而不是一个字符串。
v0.6.0添加于: v0.6.0

返回一个包含已分配网络地址的网络接口的对象。

返回对象上的每个键标识一个网络接口。 相关联的值是对象的数组,每个对象描述一个已分配的网络地址。

已分配的网络地址对象上可用的属性包括:

  • address <string> 已分配的 IPv4 或 IPv6 地址
  • netmask <string> IPv4 或 IPv6 网络掩码
  • family <string> IPv4IPv6
  • mac <string> 网络接口的 MAC 地址
  • internal <boolean> 如果网络接口是环回或类似的不可远程访问的接口,则为 true;否则为 false
  • scopeid <number> 数字 IPv6 作用域 ID(仅当 familyIPv6 时指定)
  • cidr <string> 以 CIDR 表示法表示的已分配 IPv4 或 IPv6 地址和路由前缀。 如果 netmask 无效,则此属性设置为 null
js
{
  lo: [
    {
      address: '127.0.0.1',
      netmask: '255.0.0.0',
      family: 'IPv4',
      mac: '00:00:00:00:00:00',
      internal: true,
      cidr: '127.0.0.1/8'
    },
    {
      address: '::1',
      netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
      family: 'IPv6',
      mac: '00:00:00:00:00:00',
      scopeid: 0,
      internal: true,
      cidr: '::1/128'
    }
  ],
  eth0: [
    {
      address: '192.168.1.108',
      netmask: '255.255.255.0',
      family: 'IPv4',
      mac: '01:02:03:0a:0b:0c',
      internal: false,
      cidr: '192.168.1.108/24'
    },
    {
      address: 'fe80::a00:27ff:fe4e:66a1',
      netmask: 'ffff:ffff:ffff:ffff::',
      family: 'IPv6',
      mac: '01:02:03:0a:0b:0c',
      scopeid: 1,
      internal: false,
      cidr: 'fe80::a00:27ff:fe4e:66a1/64'
    }
  ]
}

os.platform()

加入版本: v0.5.0

返回一个字符串,用于标识编译 Node.js 二进制文件的操作系统平台。该值在编译时设置。可能的值为 'aix''darwin''freebsd''linux''openbsd''sunos''win32'

返回值等同于 process.platform

如果 Node.js 构建在 Android 操作系统上,也可能返回 'android' 值。Android 支持是实验性的

os.release()

加入版本: v0.3.3

返回一个字符串,表示操作系统。

在 POSIX 系统上,操作系统版本通过调用 uname(3) 确定。 在 Windows 上,使用 GetVersionExW()。 有关更多信息,请参见 https://en.wikipedia.org/wiki/Uname#Examples

os.setPriority([pid, ]priority)

加入版本: v10.10.0

  • pid <integer> 要设置调度优先级的进程 ID。 默认: 0
  • priority <integer> 要分配给进程的调度优先级。

尝试设置由 pid 指定的进程的调度优先级。 如果未提供 pidpid0,则使用当前进程的进程 ID。

priority 输入必须是介于 -20(高优先级)和 19(低优先级)之间的整数。 由于 Unix 优先级级别和 Windows 优先级类之间的差异,priority 将映射到 os.constants.priority 中的六个优先级常量之一。 当检索进程优先级时,这种范围映射可能会导致 Windows 上的返回值略有不同。 为了避免混淆,请将 priority 设置为优先级常量之一。

在 Windows 上,将优先级设置为 PRIORITY_HIGHEST 需要提升的用户权限。 否则,设置的优先级将被静默地降低到 PRIORITY_HIGH

os.tmpdir()

[历史记录]

版本变更
v2.0.0此函数现在具有跨平台一致性,并且不再在任何平台上返回带有尾部斜杠的路径。
v0.9.9添加于: v0.9.9

返回操作系统用于临时文件的默认目录,以字符串形式表示。

在 Windows 上,结果可以被 TEMPTMP 环境变量覆盖,并且 TEMP 优先于 TMP。 如果两者均未设置,则默认为 %SystemRoot%\temp%windir%\temp

在非 Windows 平台上,将按描述的顺序检查 TMPDIRTMPTEMP 环境变量,以覆盖此方法的结果。 如果它们都没有设置,则默认为 /tmp

某些操作系统发行版会默认配置 TMPDIR (非 Windows) 或 TEMPTMP (Windows),而无需系统管理员进行其他配置。 除非用户明确覆盖,否则 os.tmpdir() 的结果通常反映了系统偏好。

os.totalmem()

添加于: v0.3.3

以整数形式返回系统内存总量,单位为字节。

os.type()

添加于: v0.3.3

返回操作系统名称,由 uname(3) 返回。 例如,在 Linux 上返回 'Linux',在 macOS 上返回 'Darwin',在 Windows 上返回 'Windows_NT'

有关在各种操作系统上运行 uname(3) 的输出的更多信息,请参见 https://en.wikipedia.org/wiki/Uname#Examples

os.uptime()

[历史记录]

版本变更
v10.0.0此函数的结果不再包含 Windows 上的小数部分。
v0.3.3添加于: v0.3.3

返回系统正常运行时间,以秒为单位。

os.userInfo([options])

新增于: v6.0.0

  • options <Object>

    • encoding <string> 用于解释结果字符串的字符编码。如果 encoding 设置为 'buffer',则 usernameshellhomedir 的值将为 Buffer 实例。默认值: 'utf8'
  • 返回: <Object>

返回有关当前有效用户的信息。在 POSIX 平台上,这通常是密码文件的子集。返回的对象包括 usernameuidgidshellhomedir。在 Windows 上,uidgid 字段为 -1shellnull

os.userInfo() 返回的 homedir 值由操作系统提供。这与 os.homedir() 的结果不同,后者在回退到操作系统响应之前会查询环境变量以获取主目录。

如果用户没有 usernamehomedir,则抛出 SystemError

os.version()

新增于: v13.11.0, v12.17.0

返回一个标识内核版本的字符串。

在 POSIX 系统上,操作系统版本通过调用 uname(3) 来确定。在 Windows 上,使用 RtlGetVersion(),如果不可用,则使用 GetVersionExW()。有关更多信息,请参见 https://en.wikipedia.org/wiki/Uname#Examples

OS 常量

以下常量由 os.constants 导出。

并非所有常量都可在每个操作系统上使用。

信号常量

[历史记录]

版本变更
v5.11.0添加了对 SIGINFO 的支持。

以下信号常量由 os.constants.signals 导出。

常量描述
SIGHUP当控制终端关闭或父进程退出时发送以指示。
SIGINT当用户希望中断进程时发送 ( + )。
SIGQUIT当用户希望终止进程并执行核心转储时发送。
SIGILL发送到进程以通知它已尝试执行非法、格式错误、未知或特权指令。
SIGTRAP当发生异常时发送到进程。
SIGABRT发送到进程以请求其中止。
SIGIOTSIGABRT 的同义词
SIGBUS发送到进程以通知它已导致总线错误。
SIGFPE发送到进程以通知它已执行非法算术运算。
SIGKILL发送到进程以立即终止它。
SIGUSR1 SIGUSR2发送到进程以标识用户定义的条件。
SIGSEGV发送到进程以通知段错误。
SIGPIPE当进程尝试写入断开的管道时发送到进程。
SIGALRM当系统计时器到期时发送到进程。
SIGTERM发送到进程以请求终止。
SIGCHLD当子进程终止时发送到进程。
SIGSTKFLT发送到进程以指示协处理器上的堆栈错误。
SIGCONT发送以指示操作系统继续暂停的进程。
SIGSTOP发送以指示操作系统停止进程。
SIGTSTP发送到进程以请求其停止。
SIGBREAK发送以指示用户何时希望中断进程。
SIGTTIN当进程在后台从 TTY 读取时发送到该进程。
SIGTTOU当进程在后台写入 TTY 时发送到该进程。
SIGURG当套接字有紧急数据要读取时发送到进程。
SIGXCPU当进程超过其 CPU 使用率限制时发送到进程。
SIGXFSZ当进程增长的文件大于允许的最大大小时发送到进程。
SIGVTALRM当虚拟计时器到期时发送到进程。
SIGPROF当系统计时器到期时发送到进程。
SIGWINCH当控制终端已更改其大小时发送到进程。
SIGIO当 I/O 可用时发送到进程。
SIGPOLLSIGIO 的同义词
SIGLOST当文件锁丢失时发送到进程。
SIGPWR发送到进程以通知电源故障。
SIGINFOSIGPWR 的同义词
SIGSYS发送到进程以通知错误的参数。
SIGUNUSEDSIGSYS 的同义词

错误常量

以下错误常量由 os.constants.errno 导出。

POSIX 错误常量

常量描述
E2BIG指示参数列表超出预期长度。
EACCES指示操作没有足够的权限。
EADDRINUSE指示网络地址已被占用。
EADDRNOTAVAIL指示网络地址当前不可用。
EAFNOSUPPORT指示网络地址族不受支持。
EAGAIN指示没有可用的数据,请稍后重试操作。
EALREADY指示套接字已有一个挂起的连接正在进行中。
EBADF指示文件描述符无效。
EBADMSG指示无效的数据消息。
EBUSY指示设备或资源正忙。
ECANCELED指示操作已取消。
ECHILD指示没有子进程。
ECONNABORTED指示网络连接已中止。
ECONNREFUSED指示网络连接已被拒绝。
ECONNRESET指示网络连接已重置。
EDEADLK指示已避免资源死锁。
EDESTADDRREQ指示需要目标地址。
EDOM指示参数超出函数的域。
EDQUOT指示已超出磁盘配额。
EEXIST指示文件已存在。
EFAULT指示无效的指针地址。
EFBIG指示文件太大。
EHOSTUNREACH指示主机不可达。
EIDRM指示标识符已被删除。
EILSEQ指示非法字节序列。
EINPROGRESS指示操作已在进行中。
EINTR指示函数调用被中断。
EINVAL指示提供了无效的参数。
EIO指示其他未指定的 I/O 错误。
EISCONN指示套接字已连接。
EISDIR指示路径是一个目录。
ELOOP指示路径中存在太多级别的符号链接。
EMFILE指示打开的文件过多。
EMLINK指示文件的硬链接过多。
EMSGSIZE指示提供的消息过长。
EMULTIHOP指示尝试了多跳。
ENAMETOOLONG指示文件名过长。
ENETDOWN指示网络已关闭。
ENETRESET指示连接已被网络中止。
ENETUNREACH指示网络不可达。
ENFILE指示系统中打开的文件过多。
ENOBUFS指示没有可用的缓冲区空间。
ENODATA指示流头读取队列上没有可用的消息。
ENODEV指示没有这样的设备。
ENOENT指示没有这样的文件或目录。
ENOEXEC指示 exec 格式错误。
ENOLCK指示没有可用的锁。
ENOLINK指示链接已断开。
ENOMEM指示没有足够的空间。
ENOMSG指示没有所需类型的消息。
ENOPROTOOPT指示给定的协议不可用。
ENOSPC指示设备上没有可用的空间。
ENOSR指示没有可用的流资源。
ENOSTR指示给定的资源不是流。
ENOSYS指示函数尚未实现。
ENOTCONN指示套接字未连接。
ENOTDIR指示路径不是目录。
ENOTEMPTY指示目录不为空。
ENOTSOCK指示给定的项目不是套接字。
ENOTSUP指示给定的操作不受支持。
ENOTTY指示不适当的 I/O 控制操作。
ENXIO指示没有这样的设备或地址。
EOPNOTSUPP指示套接字不支持该操作。(尽管在 Linux 上 ENOTSUPEOPNOTSUPP 具有相同的值,但根据 POSIX.1,这些错误值应该不同。)
EOVERFLOW指示一个值太大,无法存储在给定的数据类型中。
EPERM指示该操作不被允许。
EPIPE指示管道损坏。
EPROTO指示协议错误。
EPROTONOSUPPORT指示协议不受支持。
EPROTOTYPE指示套接字的协议类型错误。
ERANGE指示结果太大。
EROFS指示文件系统是只读的。
ESPIPE指示无效的查找操作。
ESRCH指示没有这样的进程。
ESTALE指示文件句柄已过时。
ETIME指示计时器已过期。
ETIMEDOUT指示连接超时。
ETXTBSY指示文本文件正忙。
EWOULDBLOCK指示该操作将阻塞。
EXDEV指示不正确的链接。

Windows 平台特定的错误常量

以下错误代码是 Windows 操作系统特有的。

常量描述
WSAEINTR表示函数调用被中断。
WSAEBADF表示无效的文件句柄。
WSAEACCES表示没有足够的权限完成操作。
WSAEFAULT表示无效的指针地址。
WSAEINVAL表示传递了无效的参数。
WSAEMFILE表示打开的文件过多。
WSAEWOULDBLOCK表示资源暂时不可用。
WSAEINPROGRESS表示操作正在进行中。
WSAEALREADY表示操作已经在进行中。
WSAENOTSOCK表示资源不是套接字。
WSAEDESTADDRREQ表示需要目标地址。
WSAEMSGSIZE表示消息大小太长。
WSAEPROTOTYPE表示套接字的协议类型错误。
WSAENOPROTOOPT表示错误的协议选项。
WSAEPROTONOSUPPORT表示不支持该协议。
WSAESOCKTNOSUPPORT表示不支持该套接字类型。
WSAEOPNOTSUPP表示不支持该操作。
WSAEPFNOSUPPORT表示不支持该协议族。
WSAEAFNOSUPPORT表示不支持该地址族。
WSAEADDRINUSE表示网络地址已被使用。
WSAEADDRNOTAVAIL表示网络地址不可用。
WSAENETDOWN表示网络已关闭。
WSAENETUNREACH表示网络不可达。
WSAENETRESET表示网络连接已重置。
WSAECONNABORTED表示连接已中止。
WSAECONNRESET表示连接已被对端重置。
WSAENOBUFS表示没有可用的缓冲区空间。
WSAEISCONN表示套接字已连接。
WSAENOTCONN表示套接字未连接。
WSAESHUTDOWN表示套接字关闭后无法发送数据。
WSAETOOMANYREFS表示引用过多。
WSAETIMEDOUT表示连接已超时。
WSAECONNREFUSED表示连接被拒绝。
WSAELOOP表示无法转换名称。
WSAENAMETOOLONG表示名称太长。
WSAEHOSTDOWN表示网络主机已关闭。
WSAEHOSTUNREACH表示没有到网络主机的路由。
WSAENOTEMPTY表示目录不为空。
WSAEPROCLIM表示进程过多。
WSAEUSERS表示已超过用户配额。
WSAEDQUOT表示已超过磁盘配额。
WSAESTALE表示陈旧的文件句柄引用。
WSAEREMOTE表示该项是远程的。
WSASYSNOTREADY表示网络子系统未准备好。
WSAVERNOTSUPPORTED表示 winsock.dll 版本超出范围。
WSANOTINITIALISED表示尚未成功执行 WSAStartup。
WSAEDISCON表示正在进行优雅关闭。
WSAENOMORE表示没有更多结果。
WSAECANCELLED表示操作已取消。
WSAEINVALIDPROCTABLE表示过程调用表无效。
WSAEINVALIDPROVIDER表示无效的服务提供程序。
WSAEPROVIDERFAILEDINIT表示服务提供程序初始化失败。
WSASYSCALLFAILURE表示系统调用失败。
WSASERVICE_NOT_FOUND表示未找到服务。
WSATYPE_NOT_FOUND表示未找到类类型。
WSA_E_NO_MORE表示没有更多结果。
WSA_E_CANCELLED表示调用已取消。
WSAEREFUSED表示数据库查询被拒绝。

dlopen 常量

如果操作系统可用,则以下常量在 os.constants.dlopen 中导出。 有关详细信息,请参见 dlopen(3)

常量描述
RTLD_LAZY执行惰性绑定。 Node.js 默认设置此标志。
RTLD_NOW在 dlopen(3) 返回之前解析库中所有未定义的符号。
RTLD_GLOBAL由库定义的符号将可用于后续加载的库的符号解析。
RTLD_LOCALRTLD_GLOBAL 的反面。 如果未指定任何标志,则这是默认行为。
RTLD_DEEPBIND使独立的库优先使用自己的符号,而不是先前加载的库中的符号。

优先级常量

新增于: v10.10.0

以下进程调度常量由 os.constants.priority 导出。

常量描述
PRIORITY_LOW最低的进程调度优先级。 这对应于 Windows 上的 IDLE_PRIORITY_CLASS 和所有其他平台上的 nice 值为 19
PRIORITY_BELOW_NORMAL高于 PRIORITY_LOW 且低于 PRIORITY_NORMAL 的进程调度优先级。 这对应于 Windows 上的 BELOW_NORMAL_PRIORITY_CLASS 和所有其他平台上的 nice 值为 10
PRIORITY_NORMAL默认的进程调度优先级。 这对应于 Windows 上的 NORMAL_PRIORITY_CLASS 和所有其他平台上的 nice 值为 0
PRIORITY_ABOVE_NORMAL高于 PRIORITY_NORMAL 且低于 PRIORITY_HIGH 的进程调度优先级。 这对应于 Windows 上的 ABOVE_NORMAL_PRIORITY_CLASS 和所有其他平台上的 nice 值为 -7
PRIORITY_HIGH高于 PRIORITY_ABOVE_NORMAL 且低于 PRIORITY_HIGHEST 的进程调度优先级。 这对应于 Windows 上的 HIGH_PRIORITY_CLASS 和所有其他平台上的 nice 值为 -14
PRIORITY_HIGHEST最高的进程调度优先级。 这对应于 Windows 上的 REALTIME_PRIORITY_CLASS 和所有其他平台上的 nice 值为 -20

libuv 常量

常量描述
UV_UDP_REUSEADDR