当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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