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])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。