メインコンテンツへ飛ぶ

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 として利用可能な引数の文字列リストです。
  • options Object (任意)
    • env Object (任意) - 環境変数のキーバリューペアです。 デフォルトはprocess.envです。
    • execArgv string[] (任意) - 実行形式に渡される引数の文字列リストです。
    • cwd string (任意) - 子プロセスのカレントワーキングディレクトリです。
    • stdio (string[] | string) (任意) - その子プロセスの stdoutstderr のモードを設定できます。 デフォルトはinheritです。 文字列の値は pipeignoreinherit のうちの 1 つにできます。これらの値について詳しくは Node.js の stdio ドキュメントをご参照ください。 現在このオプションは stdoutstderrpipeinherit または ignore のいずれかに設定することのみをサポートしています。 stdinignore 以外のプロパティに設定することはサポートされておらず、エラーが発生します。 例えば、サポートされている値は以下のように処理されます。
      • pipe: ['ignore', 'pipe', 'pipe'] と等価です
      • ignore: ['ignore', 'ignore', 'ignore'] と等価です
      • inherit: ['ignore', 'inherit', 'inherit'] と等価です (既定)
    • serviceName string (任意) - プロセス名で、app.getAppMetrics 及び appchild-process-gone イベント で返される ProcessMetricname プロパティに現れます。 デフォルトはNode Utility Processです。
    • allowLoadingUnsignedLibraries boolean (任意) macOS - このフラグを使用すると、ユーティリティプロセスは macOS の Electron Helper (Plugin).app ヘルパー実行形式を介して起動され、これは com.apple.security.cs.disable-library-validationcom.apple.security.cs.allow-unsigned-executable-memory の エンタイトルメントでコード署名できます。 これにより、ユーティリティプロセスが未署名のライブラリをロードできるようになります。 特にこの機能を必要としなければ、無効にしておくことを推奨します。 省略値は false です。
    • respondToAuthRequestsFromMainProcess boolean (任意) - このフラグを使用すると、net モジュール を介して作成されたすべての HTTP 401 および 407 のネットワークリクエストに対して、ClientRequest オブジェクトのデフォルトの login イベントではなく、メインプロセスの app#login イベントを介して応答できるようになります。

戻り値 UtilityProcess

クラス: UtilityProcess

UtilityProcess のインスタンスは、Node.js を統合した Chromium が生成した子プロセスを表します。

UtilityProcessEventEmitter を継承しています。

インスタンスメソッド

child.postMessage(message, [transfer])

  • message any
  • transfer 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() でメッセージを送信したときに発生します。