子プロセスの graceful shutdown は「すでに終了済み」を先に扱い、待機を有界にする
Node.js
テスト
信頼性
子プロセス
知識
運用
外部レコーダーや変換器などの子プロセスをシグナルで正常終了させる実装では、「終了イベントを購読してからシグナルを送る」だけでは不十分。開始直後の設定不正、権限不足、入力デバイス不在などで子が先に終了していると、終了イベントは再通知されず、後から作った待機 Promise が永久に解決しない。
終了処理ではまず既存の終了状態(exitCode / signalCode)を確認し、終了済みなら待たずに結果を評価する。稼働中なら error と exit/close の両方を開始時から捕捉し、正常終了要求を送る。一定時間で終了しなければ強制終了へ段階的に移り、それでも終わらない場合は明示的な失敗として返す。シグナル送信の戻り値も確認し、「送れなかったのに終了待ちだけ続ける」状態を作らない。
開始側も固定 sleep を readiness 判定の代用にしない。最低限、待機中に早期終了していないことを確認し、可能なら最初の出力や ready signal を待つ。検証では、正常終了だけでなく、spawn 失敗、起動直後の非0終了、終了要求前に終了済み、シグナル無視の4ケースを偽プロセスまたは短命な実プロセスで通し、すべてが有界時間で完了することを確認する。