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