跳至主要内容

utilityProcess

utilityProcess 创建一个启用了 Node.js 和消息端口的子进程。它提供了 Node.js 中 child_process.fork API 的等效功能,但使用 Chromium 的 服务 API 启动子进程。

进程:主进程

方法

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

  • modulePath 字符串 - 应作为子进程入口点运行的脚本的路径。
  • args 字符串[](可选) - 字符串参数列表,这些参数将在子进程中作为 process.argv 使用。
  • options 对象(可选)
    • env 对象(可选) - 环境键值对。默认为 process.env
    • execArgv 字符串[](可选) - 传递给可执行文件的字符串参数列表。
    • cwd 字符串(可选) - 子进程的当前工作目录。
    • stdio (字符串[] | 字符串)(可选) - 允许配置子进程的 stdoutstderr 模式。默认为 inherit。字符串值可以是 pipeignoreinherit 之一,有关这些值的更多详细信息,您可以参考 Node.js 的 stdio 文档。目前此选项仅支持将 stdoutstderr 配置为 pipeinheritignore。将 stdin 配置为 ignore 以外的任何属性都不受支持,并将导致错误。例如,支持的值将按如下方式处理
      • pipe:等效于 ['ignore', 'pipe', 'pipe']
      • ignore:等效于 ['ignore', 'ignore', 'ignore']
      • inherit:等效于 ['ignore', 'inherit', 'inherit'](默认值)
    • serviceName 字符串(可选) - 将显示在 ProcessMetric(由 app.getAppMetricsappchild-process-gone 事件 返回)的 name 属性中的进程名称。默认为 Node Utility Process
    • allowLoadingUnsignedLibraries 布尔值(可选) macOS - 使用此标志,实用程序进程将通过 macOS 上的 Electron Helper (Plugin).app 辅助可执行文件启动,该可执行文件可以使用 com.apple.security.cs.disable-library-validationcom.apple.security.cs.allow-unsigned-executable-memory 权限进行代码签名。这将允许实用程序进程加载未签名的库。除非您特别需要此功能,否则最好将其禁用。默认为 false
    • respondToAuthRequestsFromMainProcess 布尔值(可选) - 使用此标志,通过 net 模块 创建的所有 HTTP 401 和 407 网络请求都将允许通过主进程中的 app#login 事件响应,而不是 ClientRequest 对象上的默认 login 事件。

返回 UtilityProcess

类:UtilityProcess

UtilityProcess 的实例表示具有 Node.js 集成的 Chromium 生成的子进程。

UtilityProcess 是一个 EventEmitter

实例方法

child.postMessage(message, [transfer])

  • message 任何
  • transfer MessagePortMain[](可选)

向子进程发送消息,可以选择性地转移零个或多个 MessagePortMain 对象的所有权。

例如

// Main process
const { port1, port2 } = new MessageChannelMain()
const child = utilityProcess.fork(path.join(__dirname, 'test.js'))
child.postMessage({ message: 'hello' }, [port1])

// Child process
process.parentPort.once('message', (e) => {
const [port] = e.ports
// ...
})

child.kill()

返回 布尔值

优雅地终止进程。在 POSIX 上,它使用 SIGTERM,但在退出时会确保进程被回收。如果 kill 成功,则此函数返回 true,否则返回 false。

实例属性

child.pid

表示子进程的进程标识符 (PID) 的 整数 | 未定义。如果子进程由于错误而无法生成,则该值为 未定义。当子进程退出时,在发出 exit 事件后,该值为 未定义

child.stdout

表示子进程的 stdout 的 NodeJS.ReadableStream | null。如果子进程以 options.stdio[1] 设置为 'pipe' 以外的任何内容生成,则这将为 null。当子进程退出时,在发出 exit 事件后,该值为 null

// Main process
const { port1, port2 } = new MessageChannelMain()
const child = utilityProcess.fork(path.join(__dirname, 'test.js'))
child.stdout.on('data', (data) => {
console.log(`Received chunk ${data}`)
})

child.stderr

表示子进程的 stderr 的 NodeJS.ReadableStream | null。如果子进程以 options.stdio[2] 设置为 'pipe' 以外的任何内容生成,则这将为 null。当子进程退出时,在发出 exit 事件后,该值为 null

实例事件

事件:'spawn'

子进程成功生成后发出一次。

事件:'exit'

返回

  • code 数字 - 包含从 posix 上的 waitpid 或 windows 上的 GetExitCodeProcess 获取的进程退出代码。

子进程结束后发出。

事件:'message'

返回

  • message 任何

当子进程使用 process.parentPort.postMessage() 发送消息时发出。