child_process.fork(modulePath[, args][, options])
| 版本 | 變化 |
|---|---|
| v17.4.0、v16.14.0 |
|
| v16.4.0、v14.18.0 |
|
| 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 | 現在支持 |
| v8.0.0 |
|
| v6.4.0 | 現在支持 |
| v0.5.0 | 添加於:v0.5.0 |
參數
modulePath<string> | <URL> 在子模塊中運行的模塊。args<string[]> 字符串參數列表。options<Object>cwd<string> | <URL> 子進程的當前工作目錄。detached<boolean> 準備子進程獨立於其父進程運行。具體行為取決於平台,請參閱)。options.detachedenv<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'選項的了解更多詳情。 默認:stdiofalse。stdio<Array> | <string> 見的child_process.spawn()。提供此選項時,它會覆蓋stdiosilent。如果使用數組變體,它必須隻包含一個值為'ipc'的項目,否則將引發錯誤。例如[0, 1, 2, 'ipc']。uid<number> 設置進程的用戶身份(參見)。setuid(2)windowsVerbatimArguments<boolean> 在 Windows 上不對參數進行引用或轉義。在 Unix 上被忽略。 默認:false。timeout<number> 允許進程運行的最長時間(以毫秒為單位)。 默認:undefined。
- 返回: <ChildProcess>
child_process.fork() 方法是 的一個特例,專門用於生成新的 Node.js 進程。像 child_process.spawn() 一樣,返回一個 child_process.spawn() 對象。返回的ChildProcess 將有一個額外的內置通信通道,允許消息在父子節點之間來回傳遞。有關詳細信息,請參閱ChildProcess 。subprocess.send()
請記住,生成的 Node.js 子進程獨立於父進程,但兩者之間建立的 IPC 通信通道除外。每個進程都有自己的內存,有自己的 V8 實例。由於需要額外的資源分配,因此不建議生成大量子 Node.js 進程。
默認情況下,child_process.fork() 將使用父進程的 生成新的 Node.js 實例。 process.execPath options 對象中的execPath 屬性允許使用替代執行路徑。
使用自定義 execPath 啟動的 Node.js 進程將使用子進程上的環境變量 NODE_CHANNEL_FD 標識的文件說明符 (fd) 與父進程通信。
與 POSIX 係統調用不同,fork(2) 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
}
相關用法
- Node.js child_process.spawn(command[, args][, options])用法及代碼示例
- Node.js child_process.exec(command[, options][, callback])用法及代碼示例
- Node.js child_process.execFile(file[, args][, options][, callback])用法及代碼示例
- Node.js certificate.verifySpkac(spkac[, encoding])用法及代碼示例
- Node.js console.timeEnd()用法及代碼示例
- Node.js crypto.randomFill()用法及代碼示例
- Node.js crypto.createHmac()用法及代碼示例
- Node.js crypto.randomFillSync(buffer[, offset][, size])用法及代碼示例
- Node.js console.countReset()用法及代碼示例
- Node.js cluster.worker用法及代碼示例
- Node.js crypto.constants用法及代碼示例
- Node.js crypto.randomInt([min, ]max[, callback])用法及代碼示例
- Node.js crypto.publicEncrypt()用法及代碼示例
- Node.js console.trace()用法及代碼示例
- Node.js console.timeLog()用法及代碼示例
- Node.js console.timeStamp()用法及代碼示例
- Node.js crypto.publicDecrypt()用法及代碼示例
- Node.js console.dir()用法及代碼示例
- Node.js crypto.pbkdf2Sync(password, salt, iterations, keylen, digest)用法及代碼示例
- Node.js console.log()用法及代碼示例
- Node.js crypto.createHash()用法及代碼示例
- Node.js crypto.hkdfSync()用法及代碼示例
- Node.js crypto.randomFillSync()用法及代碼示例
- Node.js crypto.checkPrime()用法及代碼示例
- Node.js clienthttp2session.request()用法及代碼示例
注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 child_process.fork(modulePath[, args][, options])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
