OS#

稳定性:2 - 稳定

源代码: lib/os.js

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

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

os.EOL#

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

  • 在 POSIX 系统上是 \n
  • 在 Windows 系统上是 \r\n

os.availableParallelism()#

返回一个程序应使用的默认并行度的估计值。返回值总是大于零。

此函数是 libuv 的 uv_available_parallelism() 的一个简单封装。

os.arch()#

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

返回值等同于 process.arch

os.constants#

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

os.cpus()#

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

每个对象包含的属性有:

  • model <string>
  • speed <number>(单位为 MHz)
  • times <Object>
    • user <number> CPU 在用户模式下花费的毫秒数。
    • nice <number> CPU 在 nice 模式下花费的毫秒数。
    • sys <number> CPU 在系统模式下花费的毫秒数。
    • idle <number> CPU 在空闲模式下花费的毫秒数。
    • irq <number> CPU 在中断请求模式下花费的毫秒数。
[
  {
    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#

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

  • 在 Windows 上是 \\.\nul
  • 在 POSIX 系统上是 /dev/null

os.endianness()#

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

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

os.freemem()#

返回系统中可用内存的字节数,为一个整数。

os.getPriority([pid])#

  • pid <integer> 要检索其调度优先级的进程 ID。默认值: 0
  • 返回:<integer>

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

os.homedir()#

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

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

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

os.hostname()#

以字符串形式返回操作系统的主机名。

os.loadavg()#

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

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

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

os.machine()#

以字符串形式返回机器类型,例如 armarm64aarch64mipsmips64ppc64ppc64les390xi386i686x86_64

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

os.networkInterfaces()#

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

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

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

  • 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
{
  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()#

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

返回值等同于 process.platform

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

os.release()#

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

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

os.setPriority([pid, ]priority)#

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

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

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

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

os.tmpdir()#

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

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

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

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

os.totalmem()#

以整数形式返回系统总内存的字节数。

os.type()#

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

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

os.uptime()#

返回系统运行时间的秒数。

os.userInfo([options])#

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

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

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

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

os.version()#

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

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

OS 常量#

以下常量由 os.constants 导出。

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

信号常量#

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

常量 描述
SIGHUP 在控制终端关闭或父进程退出时发送。
SIGINT 在用户希望中断进程时发送(Ctrl+C)。
SIGQUIT 在用户希望终止进程并执行核心转储时发送。
SIGILL 发送给进程,以通知其试图执行非法、格式错误、未知或特权指令。
SIGTRAP 在发生异常时发送给进程。
SIGABRT 发送给进程以请求其中止。
SIGIOT SIGABRT 的同义词
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 可用时发送给进程。
SIGPOLL SIGIO 的同义词
SIGLOST 当文件锁丢失时发送给进程。
SIGPWR 发送给进程以通知电源故障。
SIGINFO SIGPWR 的同义词
SIGSYS 发送给进程以通知其参数错误。
SIGUNUSED SIGSYS 的同义词

错误常量#

以下错误常量由 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 表示执行格式错误。
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_LOCAL RTLD_GLOBAL 的反义。如果两个标志都未指定,则这是默认行为。
RTLD_DEEPBIND 使自包含的库优先使用自己的符号,而不是先前加载的库中的符号。

优先级常量#

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

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

libuv 常量#

常量 描述
UV_UDP_REUSEADDR