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