utilityProcess
utilityProcess 创建一个启用了 Node.js 和 Message Ports 的子进程。它提供了与 Node.js 中的 child_process.fork API 相当的功能,但使用 Chromium 的 Services API 来启动子进程。
进程:主进程
方法
utilityProcess.fork(modulePath[, args][, options])
modulePathstring - 作为子进程入口点的脚本路径。argsstring[] (可选) - 将作为子进程中process.argv的字符串参数列表。
utilityProcess.fork 只能在 App 的 ready 事件发出后调用。
类:UtilityProcess
UtilityProcess的实例代表了启用了 Node.js 集成的 Chromium 派生的子进程。
UtilityProcess 是一个 EventEmitter。
实例方法
child.postMessage(message, [transfer])
messageanytransferMessagePortMain[] (可选)
将消息发送到子进程,可以选择性地传输零个或多个 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()
返回 boolean
以优雅的方式终止进程。在 POSIX 系统上,它使用 SIGTERM,但会确保在进程退出时进行回收。如果 kill 成功,此函数返回 true,否则返回 false。
实例属性
child.pid
一个 Integer | undefined,表示子进程的进程标识符 (PID)。在子进程成功启动之前,该值为 undefined。当子进程退出后,在发出 exit 事件后,该值为 undefined。
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
})
您可以使用 pid 来确定进程当前是否正在运行。
child.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
一个 NodeJS.ReadableStream | null,代表子进程的标准错误。如果子进程是使用 options.stdio[2] 设置为 'pipe' 以外的任何值而生成的,那么此值为 null。当子进程退出后,在发出 exit 事件后,该值为 null。
实例事件
事件:'spawn'
在子进程成功启动后发出。
事件:'error' Experimental
返回
typestring - 错误的类型。以下值之一:FatalError
locationstring - 错误源自的位置。reportstring -Node.js 诊断报告。
当子进程由于 V8 的不可继续错误而需要终止时发出。
无论您是否监听 error 事件,在子进程终止后都会发出 exit 事件。
事件:'exit'
返回
codenumber - 包含从 POSIX 的 waitpid 或 Windows 的 GetExitCodeProcess 获取的进程退出代码。
在子进程结束后发出。
事件:'message'
返回
messageany
当子进程使用 process.parentPort.postMessage() 发送消息时发出。