プロセス終了
100%

プロセス · レッスン 5

プロセス終了

終了状態、待機、ゾンビ、親の付け替えが Linux プロセスのライフサイクルを完了する仕組みを学びます。

プロセスは main 関数から戻る、終了インターフェースを呼ぶ、シグナルで終了させられる、という方法で終わります。カーネルは大半のリソースを解放しますが、親が終了情報を回収するまで親子間の記録は続きます。

終了状態

正常終了するプログラムは整数の状態を返します。慣例上 0 は成功、0以外は何らかの失敗または別の結果です。0以外の正確な意味は各プログラムのインターフェースが定義します。

シェルでは直前のフォアグラウンドパイプラインの状態を確認できます。

$ command
$ printf '%s\n' "$?"

シェルの状態は限られた符号化範囲で、シグナル終了も表すため、完全な診断記録ではありません。各プログラムの終了コードは文書で確認します。

Unix の慣例で正常終了の成功を示す状態はどれですか?

待機と回収

カーネルは子がどう終了したかを記録し、親へ通知します。親は wait() システムコール群で情報を取得し、この記録の回収を reaping と呼びます。

待機は実行の調整にも使います。シェルはフォアグラウンドコマンドを待ってから次のプロンプトを出し、バックグラウンドジョブの待機は延期できます。長く動く親は、無関係な作業を止めず子を回収する設計が必要です。

成功した wait 操作で親が取得できるものは何ですか?

ゾンビプロセス

子が終了してから終了記録を回収されるまで、ps で状態 Z のゾンビとして現れます。すでに実行せず通常のアドレス空間もありませんが、最小限のプロセス表エントリーと使用記録が残ります。

ゾンビへシグナルを送っても再び終了させられません。蓄積する場合は待機していない親を診断し、適切な運用手順で親を修正・再起動するか、回収するプロセスへ親を付け替えます。大量になると PID またはプロセス表の容量を使い切ることがあります。

ゾンビプロセスに当てはまる説明はどれですか?

孤児と親の付け替え

子が残ったまま親が終了すると、カーネルは該当 PID 名前空間の適切な subreaper または init プロセスへ子を付け替えます。その子は実行中、スリープ中、停止中のいずれでもよく、後にゾンビになる場合もあります。「孤児」は1つの実行状態ではなく、元の親関係を失ったことを表します。

引き取ったプロセスが終了状態の回収責任を負います。サービスマネージャーやコンテナ環境では、新しい親が必ずホストの PID 1 だと思い込めません。

プロセスが元の親より長く生きるとどうなりますか?

レッスン完了

プロセス終了 を完了しました

実行の終了と、親側での後始末を区別できるようになりました。

  • 0を慣例上の成功として解釈し、0以外はプログラムの文書で確認する。

  • 待機で子の終了情報を回収する。

  • ゾンビを、終了済みだが未回収の子として理解する。

  • 孤児を、元の親の終了後に親を付け替えられた子として理解する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
次のレッスン
プロセス に戻る