chrome.exe processes remain after the preview exit with Ctrl+C
Windows環境においてvivliostyle previewをCtrl+Cで終了させると、ウィンドウは閉じますがchrome.exeのプロセスが残るようです。
ウィンドウを[×]で閉じた場合には残りませんでした。
私のWindows環境でも再現できました。何度も繰り返すとchrome.exeのプロセスが増えていきます。
タスクマネージャーのスクリーンショット:
過去バージョンを調べたところ、~~v8.7.0からこの問題が起きており、その前のv8.6.0では問題ありませんでした。PlaywrightまたはChromiumの更新が関係してると思われます。~~ 訂正: v8.6.0を再テストしたら違ってました。タスクマネージャーで残ったプロセスを終了させて繰り返すと、再現するときとしないときとがあるようです。もっと前のバージョン v8.4.0 でもこの問題が起きました。
さらに過去のバージョンをいくつか調べたところ、v8.3.0、v8.0.0では問題が起きず、v8.4.0からの問題であることが分かりました。v8.4.0での次の変更が関係しそうです:
8.4.0 (2023-10-16)
- disable chromium sandbox by default (bb82165), closes #446
このバージョンでchromium sandboxがデフォルトで無効化されました(sandboxの有効化は --sandbox を指定することで可能)。
これより前のバージョンでは、--no-sandbox を指定した場合だけsandboxが無効化されます。
そこで試しに、v8.3.0とv8.0.0で、--no-sandbox を指定してテストしたところ、問題が再現しました。また、v8.4.0や現行バージョンで --sandbox を指定すると問題が起きないことが確認できました。
修正のプルリクエストしました:
- #481
Windows上でpreviewをCtrl+Cで終了させたとき、
runExitHandler()が呼ばれない(そのためChromiumのプロセスが残る、また、一時ファイルが削除されない)不具合を修正しました。previewだけでなくbuildの場合でも後処理がされない不具合は同じでした(一時ファイルが削除されない)。
問題はWindowsではsignal eventsがサポートされず、
process.on('SIGINT', …)が機能しないことだったので、代わりにreadline interfaceを使うようにしました。
参考: https://stackoverflow.com/questions/10021373/what-is-the-windows-equivalent-of-process-onsigint-in-node-js