Перейти к основному содержанию

utilityProcess

utilityProcess creates a child process with Node.js and Message ports enabled. It provides the equivalent of child_process.fork API from Node.js but instead uses Services API from Chromium to launch the child process.

Process: Main

Методы

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

  • modulePath string - Path to the script that should run as entrypoint in the child process.
  • args string[] (optional) - List of string arguments that will be available as process.argv in the child process.
  • options Object (опционально)
    • env Object (optional) - Environment key-value pairs. По умолчанию process.env.
    • execArgv string[] (optional) - List of string arguments passed to the executable.
    • cwd string (optional) - Current working directory of the child process.
    • stdio (string[] | string) (optional) - Allows configuring the mode for stdout and stderr of the child process. По умолчанию inherit. String value can be one of pipe, ignore, inherit, for more details on these values you can refer to stdio documentation from Node.js. Currently this option only supports configuring stdout and stderr to either pipe, inherit or ignore. Configuring stdin to any property other than ignore is not supported and will result in an error. For example, the supported values will be processed as following:
      • pipe: equivalent to ['ignore', 'pipe', 'pipe']
      • ignore: equivalent to ['ignore', 'ignore', 'ignore']
      • inherit: equivalent to ['ignore', 'inherit', 'inherit'] (the default)
    • serviceName string (optional) - Name of the process that will appear in name property of ProcessMetric returned by app.getAppMetrics and child-process-gone event of app. По умолчанию Node Utility Process.
    • allowLoadingUnsignedLibraries boolean (optional) macOS - With this flag, the utility process will be launched via the Electron Helper (Plugin).app helper executable on macOS, which can be codesigned with com.apple.security.cs.disable-library-validation and com.apple.security.cs.allow-unsigned-executable-memory entitlements. This will allow the utility process to load unsigned libraries. Unless you specifically need this capability, it is best to leave this disabled. По умолчанию - false.
    • respondToAuthRequestsFromMainProcess boolean (optional) - With this flag, all HTTP 401 and 407 network requests created via the net module will allow responding to them via the app#login event in the main process instead of the default login event on the ClientRequest object. По умолчанию - false.

Returns UtilityProcess

Class: UtilityProcess

Instances of the UtilityProcess represent the Chromium spawned child process with Node.js integration.

UtilityProcess является EventEmitter.

Методы экземпляра

child.postMessage(message, [transfer])

  • message any
  • transfer MessagePortMain[] (optional)

Send a message to the child process, optionally transferring ownership of zero or more MessagePortMain objects.

Например:

// 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()

Возвращает boolean

Terminates the process gracefully. On POSIX, it uses SIGTERM but will ensure the process is reaped on exit. This function returns true if the kill is successful, and false otherwise.

Свойства экземпляра

child.pid

A Integer | undefined representing the process identifier (PID) of the child process. Until the child process has spawned successfully, the value is undefined. When the child process exits, then the value is undefined after the exit event is emitted.

const child = utilityProcess.fork(path.join(__dirname, 'test.js'))

console.log(child.pid) // undefined

child.on('spawn', () => {
console.log(child.pid) // Integer
})

child.on('exit', () => {
console.log(child.pid) // undefined
})

Note: You can use the pid to determine if the process is currently running.

child.stdout

A NodeJS.ReadableStream | null that represents the child process's stdout. If the child was spawned with options.stdio[1] set to anything other than 'pipe', then this will be null. When the child process exits, then the value is null after the exit event is emitted.

// 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

A NodeJS.ReadableStream | null that represents the child process's stderr. If the child was spawned with options.stdio[2] set to anything other than 'pipe', then this will be null. When the child process exits, then the value is null after the exit event is emitted.

События экземпляра

Event: 'spawn'

Emitted once the child process has spawned successfully.

Event: 'error' Experimental

Возвращает:

  • type string - Type of error. Одно из следующих значений:
    • FatalError
  • location string - Source location from where the error originated.
  • report string - Node.js diagnostic report.

Emitted when the child process needs to terminate due to non continuable error from V8.

No matter if you listen to the error event, the exit event will be emitted after the child process terminates.

Event: 'exit'

Возвращает:

  • code number - Contains the exit code for the process obtained from waitpid on POSIX, or GetExitCodeProcess on Windows.

Emitted after the child process ends.

Событие: 'message'

Возвращает:

  • message any

Emitted when the child process sends a message using process.parentPort.postMessage().