utilityProcess
utilityProcess
は、Node.js と Message ポートが有効な子プロセスを作成します。 Node.js の child_process.fork
API 相当の機能を提供しますが、代わりに Chromium の Services API で子プロセスを起動します。
プロセス: Main
メソッド
utilityProcess.fork(modulePath[, args][, options])
modulePath
string - 子プロセスのエントリポイントとして起動されるスクリプトへのパスです。args
string[] (任意) - その子プロセスでprocess.argv
として利用可能な引数の文字列リストです。
戻り値 UtilityProcess
クラス: UtilityProcess
UtilityProcess
のインスタンスは、Node.js を統合した Chromium が生成した子プロセスを表します。
UtilityProcess
は EventEmitter を継承しています。
インスタンスメソッド
child.postMessage(message, [transfer])
message
anytransfer
MessagePortMain[] (任意)
メッセージをその子プロセスに送信し、任意でゼロ個以上の MessagePortMain
オブジェクトの所有権を転送します。
以下がその例です。
// メインプロセス
const { port1, port2 } = new MessageChannelMain()
const child = utilityProcess.fork(path.join(__dirname, 'test.js'))
child.postMessage({ message: 'hello' }, [port1])
// 子プロセス
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
になります。
child.stdout
NodeJS.ReadableStream | null
型で、その子プロセスの標準出力を表します。 options.stdio[1] を 'pipe' 以外に設定して子プロセスを生成した場合、これは null
になります。 子プロセスが終了すると、exit
イベントが発生し、以降この値は null
になります。
// メインプロセス
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'
その子プロセスが正常に生成されると発生します。
イベント: 'exit'
戻り値:
code
number - プロセスの終了コードを格納しており、POSIX では waitpid、Windows では GetExitCodeProcess から得られるものです。
その子プロセスが終了した後に発生します。
イベント: 'message'
戻り値:
message
any
その子プロセスが process.parentPort.postMessage()
でメッセージを送信したときに発生します。