ゾンビ または廃止されたプロセス Linux では、 は完了したプロセスですが、親プロセスと子プロセスの対応が取れていないため、プロセス テーブルにエントリが残っています。通常、親プロセスは、wait() 関数を通じて子プロセスのステータスをチェックします。子プロセスが終了すると、待機関数は親にプロセスをメモリから完全に終了するように通知します。ただし、親プロセスがその子プロセスの待機関数の呼び出しに失敗した場合、子プロセスはシステム内でデッド プロセスまたはゾンビ プロセスとして生きたままになります。これらのゾンビ プロセスは、システム上に大量に蓄積し、そのパフォーマンスに影響を与える可能性があります。その場合、このチュートリアルで説明されている方法とコマンドを使用して、これらのゾンビを手動で殺さなければならない場合があります。
このチュートリアルは、Ubuntu 22.04 を含む最近のすべての Ubuntu バージョンと互換性があります。
ゾンビ プロセスの表示
効率を変えるゾンビプロセスなど、システムで実行されているさまざまなプロセスを調べることで、システムのパフォーマンスを確認できます。 Ubuntu では、これらのプロセスを次の方法で表示できます。
- グラフィカル ユーザー インターフェースから
- コマンドラインから
GUI から
システムで実行中のゾンビ プロセスをグラフィカルに表示するには、システム モニターを開きます。 Ubuntu Dash を介してユーティリティを実行します。次のシステム モニターのスクリーンショットでは、システム上で 2 つのゾンビが実行されていることがわかります。また、システム上のゾンビ プロセスの数が、私のシステムで実行されているものよりも少ないか多い可能性もあります。
コマンドラインから
トップ コマンドは、システムで実行されているプロセスの詳細ビューと、それらが使用しているメモリおよび CPU リソースを表示します。また、システムで実行されているゾンビ プロセスに関する情報も提供します。 Ctrl+Alt+T を押してターミナルを開きます 次に top と入力します .このコマンドを実行すると、次の出力が得られました。
$ トップ
2 行目に、私のシステムで 1 つのゾンビ プロセスが実行されていることがわかります。
ゾンビ プロセスの詳細が必要な場合は、次のコマンドを使用してください:
$ ps axo stat,ppid,pid,comm | grep -w defunct
このコマンドは、状態、parentID、プロセス ID、ゾンビ プロセスを実行しているプログラム (私のシステムでは「ゾンビ」という名前のダミー プログラム) を提供します。 defunct フラグは、これがデッド ゾンビ プロセスであることを示します。
ゾンビプロセスのキル
まず、ゾンビ プロセスがシステムのパフォーマンスに対する脅威であることを理解しましょう。ゾンビは死んでおり、メモリや CPU リソースを消費しないほぼ完全なプロセスであることを理解することが重要です。ただし、これらの各プロセスには、プロセッサ用に予約された限定された PID のプールから取得される一意のプロセス ID が割り当てられています。大量のゾンビが集まると、PID プールの大部分が食い尽くされ、プロセス ID がないために新しいプロセスを起動できなくなります。
システムを占有している少数の機能していないプログラムは大きな脅威ではありませんが、これは、バグまたは wait() 関数の欠落のために、親プログラムがそれらを呼び出すことができなかったことを意味します.
親プロセスが自動的に wait() 関数を呼び出すことができなかった場合、すべての子に対して待機関数を実行するように親プロセスに手動で通知する必要があります。これにより、完全な状態の子を呼び戻すことができます。これを行うには、SIGCHLD コマンドを実行します。それがうまくいかない場合は、親プロセスを手動で強制終了して、そのすべてのゾンビの子プロセスも強制終了し、新しいプロセスのプロセス ID を解放します。
次の方法でゾンビ プロセスを強制終了できます:
- グラフィカル ユーザー インターフェースから
- コマンドラインから
GUI から
次のように、システム モニター ユーティリティを使用してグラフィカルにゾンビ プロセスを強制終了できます。
<オール>
ゾンビ プロセスはシステムから削除されます。
コマンドラインから
top コマンドを使用して、システムで実行されているゾンビ プロセスがあることを確認した後。プロセスの詳細を表示する方法です。
通常の方法は、ゾンビの親プロセスにコマンドを強制終了するように通知する次のコマンドを使用することです。
$ kill -s SIGCHLD PID
子プロセスをチェックするために、すべての親プロセスが適切にプログラムされているわけではないため、このコマンドが機能しない場合があります。その場合、次のコマンドで親プロセスを強制終了できます:
$ sudo kill -9 3376
この方法ですべてのゾンビ プロセスを強制終了し、top コマンドを実行すると、システムで実行されているゾンビ プロセスがなくなったことがわかります。
このチュートリアルに従って作業した後、システム上のゾンビ プロセスを探し、コマンド ラインまたはグラフィカル ユーザー インターフェイスを使用して手動で強制終了することにより、オペレーティング システムを最適化できます。この行為により、システムで実行する新しいプロセスのプロセス ID が解放されます。