ゾンビプロセスとは?ざっくりと3行で

【深掘り】これだけ知ってればOK!
ゾンビプロセスは、文字通り「死体」のようなものです。既に計算処理は終えているため、CPUを使ったりメモリを大量に消費したりすることはありません。しかし、OSが管理する「現在動いているプログラムのリスト」には名前が残ったままです。
通常、プログラム(子)が終了すると、それを起動したプログラム(親)が「終了確認(wait処理)」を行って初めてリストから消えます。この親による「お見送り(後始末)」がサボられている状態がゾンビプロセスです。既に死んでいるため、強制終了コマンド(kill)を送っても、死体を殺すことはできず消滅しません。
会話での使われ方

サーバーのプロセスIDが枯渇しかけてると思ったら、大量のゾンビプロセスが滞留していました。




このバッチ処理、終了処理の記述が漏れてるから、実行するたびにゾンビを生み出しちゃうよ。




ゾンビ化してるプロセスがあるけどkillが効かないから、親プロセスの方を再起動しておいて。
【まとめ】3つのポイント
- 報告待ちの帰れない社員:仕事は終わったのに、上司(親)が報告を聞いてくれないからタイムカードを切れない状態
- 管理台帳の無駄遣い:給料(CPU/メモリ)は発生しないが、社員名簿の行(プロセスID)だけを占有している
- 親の責任:解消するには、本人ではなく管理している親プログラムに対処してもらう必要がある
よくある質問
- Qゾンビプロセスはいつ使うのがベストですか?
- A意図して使うものではなく、プログラムの不具合(バグ)によって発生してしまうエラー状態です。見つけ次第、解消する必要があります。
- Qゾンビプロセスを失敗させない(発生させない)コツはありますか?
- Aプログラムを開発する際に、子プロセスを生成したら必ず親プロセス側で`wait`関数などを呼び出し、終了ステータスを受け取る処理を実装することです。
- Qゾンビプロセスの具体例は何ですか?
- ALinuxなどのUNIX系OSで
psコマンドやtopコマンドを実行した際、ステータス欄に「Z」や「defunct」と表示されているプロセスがそれにあたります。
- Qゾンビプロセスと孤児プロセスとの違いは何ですか?
- Aゾンビは「親が終了確認をしてくれない子」ですが、孤児プロセスは「親が先に死んでしまい、身寄りがなくなった子(実行中)」を指します。孤児プロセスは通常、initプロセス(システムの親)が養子として引き取り、正常に終了させてくれます。



コメント
ゾンビプロセスを知れて助かりました。