6.5 KiB
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
Methods
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 asprocess.argv
in the child process.options
Object (optional)env
Object (optional) - Environment key-value pairs. Default isprocess.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 forstdout
andstderr
of the child process. Default isinherit
. String value can be one ofpipe
,ignore
,inherit
, for more details on these values you can refer to stdio documentation from Node.js. Currently this option only supports configuringstdout
andstderr
to eitherpipe
,inherit
orignore
. Configuringstdin
to any property other thanignore
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 inname
property ofProcessMetric
returned byapp.getAppMetrics
andchild-process-gone
event ofapp
. Default isNode Utility Process
.allowLoadingUnsignedLibraries
boolean (optional) macOS - With this flag, the utility process will be launched via theElectron Helper (Plugin).app
helper executable on macOS, which can be codesigned withcom.apple.security.cs.disable-library-validation
andcom.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. Default isfalse
.respondToAuthRequestsFromMainProcess
boolean (optional) - With this flag, all HTTP 401 and 407 network requests created via the net module will allow responding to them via theapp#login
event in the main process instead of the defaultlogin
event on theClientRequest
object.
Returns UtilityProcess
Class: UtilityProcess
Instances of the
UtilityProcess
represent the Chromium spawned child process with Node.js integration.
UtilityProcess
is an EventEmitter.
Instance Methods
child.postMessage(message, [transfer])
message
anytransfer
MessagePortMain[] (optional)
Send a message to the child process, optionally transferring ownership of
zero or more MessagePortMain
objects.
For example:
// 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()
Returns 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.
Instance Properties
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'))
child.on('spawn', () => {
console.log(child.pid) // Integer
})
child.on('exit', () => {
console.log(child.pid) // undefined
})
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.
Instance Events
Event: 'spawn'
Emitted once the child process has spawned successfully.
Event: 'error' Experimental
Returns:
type
string - Type of error. One of the following values: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'
Returns:
code
number - Contains the exit code for the process obtained from waitpid on POSIX, or GetExitCodeProcess on Windows.
Emitted after the child process ends.
Event: 'message'
Returns:
message
any
Emitted when the child process sends a message using process.parentPort.postMessage()
.