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 (optional)
env
Object (optional) - Environment key-value pairs. Default is 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. Default is 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
is not supported; stdin
will
always be ignored.
For example, the supported values will be processed as following:pipe
: equivalent to ['ignore', 'pipe', 'pipe'] (the default)ignore
: equivalent to ['ignore', 'ignore', 'ignore']inherit
: equivalent to ['ignore', 'inherit', 'inherit']serviceName
string (optional) - Name of the process that will appear in name
property of
child-process-gone
event of app
.
Default is node.mojom.NodeService
.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.
Default is false
.Returns UtilityProcess
Instances of the
UtilityProcess
represent the Chromium spawned child process with Node.js integration.
UtilityProcess
is an EventEmitter.
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.
child.pid
A Integer | undefined
representing the process identifier (PID) of the child process.
If the child process fails to spawn due to errors, then the value is undefined
. When
the child process exits, then the value is undefined
after the exit
event is emitted.
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.
Emitted once the child process has spawned successfully.
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.
Returns:
message
anyEmitted when the child process sends a message using process.parentPort.postMessage()
.