Linuxのゾンビプロセスと孤立プロセスとは?仕組みと対処法を解説
Linuxシステムでは、通常の実行中プロセスのほかに、「ゾンビプロセス」や「孤立プロセス」といった特殊な状態を持つプロセスが存在します。これらを放置すると、プロセスID(PID)の枯渇などシステム全体に悪影響を及ぼす可能性があるため、正しい理解と適切な管理が重要です。本記事では、それぞれの特徴、発生メカニズム、そして対処方法についてわかりやすく解説します。
ゾンビプロセス(Zombie Process)とは
ゾンビプロセスとは、すでに実行を終えているにもかかわらず、プロセステーブル上にエントリ(登録情報)が残っているプロセスのことです。主に子プロセスで発生しやすく、これは親プロセスが子プロセスの終了ステータス(終了コード)を読み取る必要があるためです。親プロセスがwait()システムコールを呼び出して終了ステータスを取得すると、ゾンビプロセスはプロセステーブルから削除されます。この一連の処理は「ゾンビの回収(reaping)」と呼ばれます。
以下の図は、ゾンビプロセスが生成されてから終了するまでの流れを示したものです。

ゾンビプロセスの影響
ゾンビプロセス自体は、CPUやメモリなどのシステムリソースをほとんど消費しません。しかし、プロセスID(PID)だけは占有し続けます。ゾンビプロセスが大量に発生すると、利用可能なPIDを使い果たしてしまい、新しいプロセスを起動できなくなる恐れがあります。
ゾンビプロセスへの対処法
ゾンビプロセスは直接killすることができません。対処するには、親プロセスにSIGCHLDシグナルを送るか、親プロセス自体を終了させます。親が終了すると、ゾンビプロセスはinit(systemd環境ではsystemd)に引き取られ、自動的に回収されます。また、psコマンドでステータスが「Z」(defunct)になっているプロセスを確認することで、ゾンビプロセスを発見できます。
孤立プロセス(Orphan Process)とは
孤立プロセスとは、親プロセスがすでに終了・停止しているにもかかわらず、まだ実行を続けているプロセスのことです。孤立プロセスには、意図的に発生させるケースと、意図せず発生してしまうケースの2つがあります。
意図的な孤立プロセス
意図的に孤立させられたプロセスは、手動の操作なしにバックグラウンドで動作し続けます。これは、常時稼働させるサービスを起動したり、ユーザーの監視なしに長時間のジョブを実行させたりする目的で行われます。具体的には、nohupコマンドやdisownコマンドの利用、デーモン化などが該当します。
非意図的な孤立プロセス
一方、親プロセスがクラッシュしたり異常終了したりした場合にも、子プロセスは孤立します。このような非意図的な孤立プロセスは、プロセスグループの仕組みを利用することで回避できます。なお、孤立したプロセスは最終的にinitプロセス(PID 1)が引き取り、新しい親として管理します。
まとめ
ゾンビプロセスは「実行は終了したが回収されていない」プロセス、孤立プロセスは「親を失っても動き続けている」プロセスです。ゾンビプロセスはwait()システムコールによる回収が必要であり、孤立プロセスはinitが引き取って管理します。両者の違いを正しく理解しておくことで、Linuxのプロセス管理やトラブルシューティングがよりスムーズになります。
-
Linuxでプロセスを強制終了する方法!top・ps・killコマンドの使い方を徹底解説
Linuxには、プロセスを強制終了(キル)するためのさまざまな方法があります。このチュートリアルでは、動作がおかしくなったプロセスを見つけて終了させる方法を解説します。 プロセスは簡単に「孤児」になってしまうことがあります。意図的であろうとなかろうと、親プロセスがクラッシュすると、子プロセスだけが取り残されて実行され続けることがあります。また、親プロセスが完了した子プロセスを回収(reap)できず、ゾンビプロセスになってしまうケースもあります。 どちらの状態のプロセスも放置されたままでは動けず、手動での介入が必要です。そこで登場するのがジョブコントロールです。それでは、壊れたプロセスを終了させ
-
Linuxで応答しないアプリを強制終了する方法まとめ【GUI・コマンド両対応】
Linuxは堅牢なオペレーティングシステムとして知られており、アプリケーションのフリーズや動作の遅延といったトラブルは比較的少ないです。それでも、まれにアプリケーションが応答しなくなることがあります。そんなときは、復旧を待つだけでなく、フリーズしたアプリを強制終了して問題を解決できます。本記事では、応答しないアプリケーションを終了させるための実用的な方法をいくつか紹介します。状況に応じて最適な方法を選べるよう、GUI操作からコマンドラインまで幅広く解説していきます。注意: 本記事ではKali Linuxを使用していますが、紹介する方法は他の多くのLinuxディストリビューションでも同様に利用可