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 在 sys 模式下花费的毫秒数。
    • idle <number> CPU 在空闲模式下花费的毫秒数。
    • irq <number> CPU 在 irq 模式下花费的毫秒数。
[
  {
    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 指定的进程的调度优先级。 如果未提供 pidpid0,则返回当前进程的优先级。

os.homedir()#

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

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

在 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 指定的进程设置调度优先级。 如果未提供 pidpid0,则使用当前进程的进程 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.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 指示 exec 格式错误。
ENOLCK 指示没有可用的锁。
ENOLINK 指示链接已断开。
ENOMEM 指示没有足够的空间。
ENOMSG 指示没有所需类型的消息。
ENOPROTOOPT 指示给定的协议不可用。
ENOSPC 指示设备上没有可用的空间。
ENOSR 指示没有可用的流资源。
ENOSTR 指示给定的资源不是流。
ENOSYS 指示函数尚未实现。
ENOTCONN 指示套接字未连接。
ENOTDIR 指示路径不是目录。
ENOTEMPTY 指示目录不为空。
ENOTSOCK 指示给定的项目不是套接字。
ENOTSUP 指示不支持给定的操作。
ENOTTY 指示不适当的 I/O 控制操作。
ENXIO 指示没有此类设备或地址。
EOPNOTSUPP 指示套接字不支持该操作。 虽然 ENOTSUPEOPNOTSUPP 在 Linux 上具有相同的值,但根据 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_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