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.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()
方法是
的一個特例,專門用於生成新的 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])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。