Linux上で外部からKillされたENGINEを再起動できない問題を修正 #286
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
内容
#282 から分割しました。
Linux上で、ENGINEが外部からプロセスキルされると、
VOICEVOXのUI上で「エンジンの再起動」操作(RESTART_ENGINE)が終了しない問題を修正します。
現在 5488b92 のロジックである
engineProcess.exitCode !=== null
のみでは、child_processを使って起動されたENGINEのプロセスが終了しているかどうかを完全には判定できません。例えば、
kill $PID
でENGINEがプロセスキルされたとき、exitCode === null
にもかかわらず、ENGINE のプロセスは終了しているという状態になります。このとき、RESTART_ENGINEでは、すでに終了しているENGINEのプロセスをkillしようとする動作をします。
killされているプロセスをkillしようとしても、ChildProcessの
close
イベントが起こらないため、起動処理runEngine()
が実行されず、「再起動」が終了しません。ENGINEがプロセスキルされたとき、
signalCode
は設定されるため、signalCode !== null
を合わせてチェックすることで、この問題を修正します。実験
#281 で追加した
process.on("close", ...)
でのログ出力で、exitCode、signalCodeの挙動を確認してみました。taskkill /F /PID $PID
、タスクマネージャ タスクの終了)kill $PID
)ケース3では、VOICEVOXのUIからの「エンジンの再起動」操作(RESTART_ENGINE)が終了しなくなるという問題が起きます。
再現の流れ
kill $PID
でENGINEをプロセスキルするclose
イベントが起こらないrunEngine()
が実行されないケース3が起きる状況の例
kill $PID
関連 Issue
ref #282
ref #270
ref #218