當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js child_process.fork(modulePath[, args][, options])用法及代碼示例


child_process.fork(modulePath[, args][, options])

曆史
版本變化
v17.4.0、v16.14.0

modulePath 參數可以是使用 file: 協議的 WHATWG URL 對象。

v16.4.0、v14.18.0

cwd 選項可以是使用 file: 協議的 WHATWG URL 對象。

v15.13.0、v14.18.0

添加了超時。

v15.11.0、v14.18.0

添加了AbortSignal 的 killSignal。

v15.6.0、v14.17.0

添加了AbortSignal 支持。

v13.2.0、v12.16.0

現在支持serialization 選項。

v8.0.0

stdio 選項現在可以是字符串。

v6.4.0

現在支持stdio 選項。

v0.5.0

添加於:v0.5.0


參數
  • modulePath <string> | <URL> 在子模塊中運行的模塊。
  • args <string[]> 字符串參數列表。
  • options <Object>
    • cwd <string> | <URL> 子進程的當前工作目錄。
    • detached <boolean> 準備子進程獨立於其父進程運行。具體行為取決於平台,請參閱 options.detached )。
    • env <Object> 環境鍵值對。 默認: process.env
    • execPath <string> 用於創建子進程的可執行文件。
    • execArgv <string[]> 傳遞給可執行文件的字符串參數列表。 默認: process.execArgv
    • gid <number> 設置進程的組標識(參見 setgid(2) )。
    • serialization <string> 指定用於在進程之間發送消息的序列化類型。可能的值為 'json''advanced' 。有關詳細信息,請參閱Advanced serialization默認: 'json'
    • signal <AbortSignal> 允許使用 AbortSignal 關閉子進程。
    • killSignal <string> | <integer> 生成的進程將被超時或中止信號殺死時使用的信號值。 默認: 'SIGTERM'
    • silent <boolean> 如果 true ,子節點的 stdin、stdout 和 stderr 將通過管道傳輸到父節點,否則它們將從父節點繼承,請參見 child_process.spawn() 'pipe''inherit' 選項的 stdio 了解更多詳情。 默認: false
    • stdio <Array> | <string> child_process.spawn() stdio 。提供此選項時,它會覆蓋 silent 。如果使用數組變體,它必須隻包含一個值為 'ipc' 的項目,否則將引發錯誤。例如 [0, 1, 2, 'ipc']
    • uid <number> 設置進程的用戶身份(參見 setuid(2) )。
    • windowsVerbatimArguments <boolean> 在 Windows 上不對參數進行引用或轉義。在 Unix 上被忽略。 默認: false
    • timeout <number> 允許進程運行的最長時間(以毫秒為單位)。 默認: undefined
  • 返回: <ChildProcess>

child_process.fork() 方法是 child_process.spawn() 的一個特例,專門用於生成新的 Node.js 進程。像 child_process.spawn() 一樣,返回一個 ChildProcess 對象。返回的 ChildProcess 將有一個額外的內置通信通道,允許消息在父子節點之間來回傳遞。有關詳細信息,請參閱 subprocess.send()

請記住,生成的 Node.js 子進程獨立於父進程,但兩者之間建立的 IPC 通信通道除外。每個進程都有自己的內存,有自己的 V8 實例。由於需要額外的資源分配,因此不建議生成大量子 Node.js 進程。

默認情況下,child_process.fork() 將使用父進程的 process.execPath 生成新的 Node.js 實例。 options 對象中的execPath 屬性允許使用替代執行路徑。

使用自定義 execPath 啟動的 Node.js 進程將使用子進程上的環境變量 NODE_CHANNEL_FD 標識的文件說明符 (fd) 與父進程通信。

fork(2) POSIX 係統調用不同,child_process.fork() 不會克隆當前進程。

child_process.fork() 不支持 child_process.spawn() 中可用的shell 選項,如果設置將被忽略。

如果啟用了 signal 選項,則在相應的 AbortController 上調用 .abort() 與在子進程上調用 .kill() 類似,隻是傳遞給回調的錯誤將是 AbortError

if (process.argv[2] === 'child') {
  setTimeout(() => {
    console.log(`Hello from ${process.argv[2]}!`);
  }, 1_000);
} else {
  const { fork } = require('node:child_process');
  const controller = new AbortController();
  const { signal } = controller;
  const child = fork(__filename, ['child'], { signal });
  child.on('error', (err) => {
    // This will be called with err being an AbortError if the controller aborts
  });
  controller.abort(); // Stops the child process
}

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 child_process.fork(modulePath[, args][, options])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。