ターミナルアプリケーションにおける子プロセスの終了処理を優雅に実行する
2025-07-31
Ctrl+C 後に子プロセスがクリーンに終了しない場合、ターミナルが破損することがあります。この記事では、Moose CLI を例に、この問題の解決策を説明します。主な戦略は以下のとおりです。1. プロセス出力プロキシ: 子プロセスの stdout/stderr をログシステムにリダイレクトし、ターミナルから隔離します。2. ターミナル状態管理: crossterm を使用して、終了時にターミナルの状態(ローモード、代替スクリーンバッファ、カーソル表示)を明示的にクリーンアップします。3. 優雅なプロセス終了: SIGTERM での終了を試み、タイムアウト付きで SIGKILL を使用します。4. スレッドセーフなスピナー管理: スレッド間の競合状態を避け、スピナーと子プロセスの出力を調整します。これらの戦略により、子プロセスによるターミナルの破損を防ぎ、堅牢なターミナルアプリケーションを構築できます。
開発
子プロセス