vivliostyle-cli icon indicating copy to clipboard operation
vivliostyle-cli copied to clipboard

chrome.exe processes remain after the preview exit with Ctrl+C

Open u1f992 opened this issue 1 year ago • 2 comments

Windows環境においてvivliostyle previewをCtrl+Cで終了させると、ウィンドウは閉じますがchrome.exeのプロセスが残るようです。

vivliostyle-cli_issue_202403191653

ウィンドウを[×]で閉じた場合には残りませんでした。

u1f992 avatar Mar 19 '24 08:03 u1f992

私のWindows環境でも再現できました。何度も繰り返すとchrome.exeのプロセスが増えていきます。

タスクマネージャーのスクリーンショット:

Screenshot 2024-03-20 12 06 29

過去バージョンを調べたところ、~~v8.7.0からこの問題が起きており、その前のv8.6.0では問題ありませんでした。PlaywrightまたはChromiumの更新が関係してると思われます。~~ 訂正: v8.6.0を再テストしたら違ってました。タスクマネージャーで残ったプロセスを終了させて繰り返すと、再現するときとしないときとがあるようです。もっと前のバージョン v8.4.0 でもこの問題が起きました。

MurakamiShinyu avatar Mar 20 '24 03:03 MurakamiShinyu

さらに過去のバージョンをいくつか調べたところ、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 を指定すると問題が起きないことが確認できました。

MurakamiShinyu avatar Mar 20 '24 07:03 MurakamiShinyu

修正のプルリクエストしました:

  • #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

MurakamiShinyu avatar Apr 10 '24 05:04 MurakamiShinyu