Linuxカーネルのスレッドライフサイクルの落とし穴:ランダムに終了するChromiumプロセスのケース

2025-04-10
Linuxカーネルのスレッドライフサイクルの落とし穴:ランダムに終了するChromiumプロセスのケース

Recall.aiのOutput Mediaの起動レイテンシを最適化していたエンジニアが、不可解なバグに遭遇しました。Chromiumプロセスが起動後にランダムに終了するというものです。根本原因は、Bubblewrapの`--die-with-parent`フラグと、LinuxカーネルによるPR_SET_PDEATHSIGの処理方法にありました。このフラグは、親プロセスではなく親スレッドが終了したときに、子プロセスにSIGKILLシグナルを送信します。Tokioのスレッド管理メカニズムがこの動作と相互作用し、親スレッドが回収されたときにChromiumが予期せず終了するという結果になりました。フラグの削除によって問題は解決しましたが、Linuxカーネルのあまり知られていない特性が明らかになり、スレッドライフサイクルとプロセス分離の相互作用を扱う際の注意の必要性を強調しています。

続きを読む
開発

難解なLinuxプロセスフラグによるレイテンシ83%削減

2025-03-06
難解なLinuxプロセスフラグによるレイテンシ83%削減

Recall.aiのOutput Media機能を最適化していたエンジニアが、悩ましい問題に遭遇しました。サンドボックス環境内でChromiumプロセスがランダムに終了するのです。徹底的なデバッグの結果、原因はLinuxカーネルのprctl(PR_SET_PDEATHSIG, SIGKILL)関数にあることが判明しました。この関数は親プロセスではなく親スレッドを追跡します。Tokioのスレッド管理メカニズムとの予期せぬ相互作用により、親スレッドが刈り取られ、SIGKILLシグナルがトリガーされ、子プロセスが終了しました。Bubblewrapの--die-with-parentフラグを除去することで問題が解決し、レイテンシが83%削減されました。

続きを読む