utilityProcess
utilityProcess
使用 Node.js 和 Message 端口创建了一个子进程。 它提供一个相当于 Node.js 的 child_process.fork API,但使用 Chromium 的 Services API 代替来执行子进程。
进程:主进程
方法
utilityProcess.fork(modulePath[, args][, options])
modulePath
string - 作为子进程执行入口的脚本文件路径。args
string[] (可选) - 字符串参数列表,在子进程中可以使用process.argv
。options
Object (可选)env
Object (可选) - 环境变量 key-value 键值对。 默认值为process.env
.execArgv
string[] (可选) - 传递给执行文件的字符串参数列表。cwd
string (可选) - 子进程的工作目录。stdio
(string[] | string) (可能) - 允许配置子进程的stdout
和stderr
的模式。 默认值为inherit
. 字符串的值可以是pipe
,ignore
,inherit
期中的一个,更多详细信息,可以参考 Node.js 的 stdio 文档。 当前此选项仅支持stdout
和stderr
配置为pipe
,inherit
或ignore
。 不支持配置stdin
。stdin
将被忽略。 例如,支持的值将被处理如下:pipe
:相当于 [‘ignore’, ‘pipe’, ‘pipe’] (默认)ignore
:相当于 [‘ignore’, ‘ignore’, ‘ignore’]inherit
:相当于 [‘ignore’, ‘inherit’, ‘inherit’]
serviceName
string (可选) - 将显示在 app 的 child-process-gone 事件中name
属性的进程名称。 默认值为node.mojom.NodeService
.allowLoadingUnsignedLibraries
boolean (可选) macOS - 使用这个标记,在 macOS 中执行 utility process 将通过Electron Helper (Plugin).app
助手,它可以被com.apple.security.cs.disable-library-validation
和com.apple.security.cs.allow-unsigned-executable-memory
权限签名。 将允许 utility process 加载未签名的库。 除非您特别需要这种能力,否则最好保留这个禁用。 默认值为false
.
Class: UtilityProcess
UtilityProcess
的实例代表 Chromium 派生子进程与 Node.js 的结合。
UtilityProcess
是一个 EventEmitter。
实例方法
child.postMessage(message, [transfer])
message
anytransfer
MessagePortMain[] (可选)
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
优雅的终于进程。 在 POSIX,使用 SIGTERM,为确保进程在退出时可以收到。 如果终止成功,这个方法返回 true,否则则返回 false。
实例属性
child.pid
一个 Integer | undefined
代表子进程的进程 ID (PID) 。 如果由于子进程失败引发错误,则值为 undefined
。 当子进程退出,在 exit
事件处罚之后,值为 undefined
。
child.stdout
一个 NodeJS.ReadableStream | null
代表子进程的 stdout 。 如果子进程是通过 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
A NodeJS.ReadableStream | null
代表子进程的 stderr 。 如果子进程是通过 options.stdio[2] 选项生成的,它设置为除了 ‘pipe’ 以为的值,那么将为 null
。 当子进程退出,在 exit
事件处罚之后,值为 null
。
实例事件
Event: ‘spawn’
子进程成功生成后触发一次。
Event: ‘exit’
返回:
code
number - 包含进程的退出代码,posix 来自 waitpid,windows 来自 GetExitCodeProcess 。
进程结束之后触发。
Event: ‘message’
返回:
message
any
当子进程使用 process.parentPort.postMessage() 发送一条消息时触发。