Linuxでゾンビプロセスを見つけて殺す方法

簡単な説明:これは、Linuxでゾンビプロセスを見つけてそれらを強制終了するための簡単なヒントです。 また、プロセスとゾンビプロセスについて1つか2つ学びます。

ゾンビプロセスについて学ぶ前に、Linuxのプロセスとは何かを思い出させてください。

一言で言えば、 処理する パフォーマンスのプログラムの実行中のインスタンスです。 フォアグラウンド(インタラクティブプロセス)またはバックグラウンド(インタラクティブまたは自動プロセスではない)にすることができます。 親(実行時に他のプロセスの作成者)または子(他の人によって作成されたプロセス)プロセスにすることができます。

Linuxでは、PID 0の最初のinit(またはsystemd)プロセスを除いて、他のすべてのプロセスには親プロセスがあります。 プロセスには、独自の子プロセスもあります。

私を信じないの? 使用 pstree ターミナルでコマンドを実行してプロセスツリーを確認し、システムのプロセスの「家系図」を確認します。

Linuxのゾンビプロセスとは何ですか?

子プロセスが停止すると、親プロセスに通知され、メモリの解放などのクリーンアップを実行できます。ただし、親プロセスがその停止を認識していない場合、子プロセスはゾンビ状態になります。 親の場合、子はまだ存在しますが、子プロセスは実際には死んでいます。 これは、ゾンビプロセス(無効なプロセスとも呼ばれます)が作成され、システムにとどまる方法です。

これは、Turnoff.usによるゾンビプロセスの優れた面白い見解です。

画像クレジット: Turnoff.us

あなたは本当にゾンビのプロセスについて心配する必要がありますか?

ここで重要なのは、ゾンビのプロセスはその名前が聞こえるほど危険ではないということです。

システムのRAMが限られている場合、またはRAMを消費するゾンビプロセスが多すぎる場合に、問題が発生する可能性があります。 また、ほとんどのLinuxプロセスでは最大PIDを32768に設定できます。他の生産的なタスクに使用できるIDがない場合、システムがクラッシュする可能性があります。

これはめったに起こりませんが、特に、コーディングが不十分なプログラムが多数のゾンビプロセスを誘発し始めた場合は可能性があります。

このような場合、ゾンビプロセスを見つけて殺すのは良い考えです。

ゾンビプロセスを見つける方法は?

Linuxのプロセスは、次のいずれかの状態になる可能性があります。

  • D =途切れない睡眠
  • I =アイドル
  • R =実行中
  • S =寝ている
  • T =ジョブ制御信号により停止
  • t =トレース中にデバッガーによって停止されました
  • Z =ゾンビ

しかし、プロセスとそれぞれのステータスはどこで確認できますか? 簡単な方法の1つは、ターミナルと トップコマンド

トップコマンドshowprocessesとそのステータス

上のスクリーンショットでわかるように、合計250のタスク(またはプロセス)があり、1つは実行中で、248のプロセスはスリープ状態で、1つはゾンビ状態です。

さて、ゾンビプロセスを殺す方法という疑問が生じます。

ゾンビプロセスを見つけて殺す方法は? ゾンビプロセスを殺すことはできますか?

ゾンビプロセスはすでに死んでいます。 すでに死んでいるプロセスをどのように殺しますか?

ゾンビ映画では、頭の中でゾンビを撃ったり、燃やしたりします。 ここではそれはオプションではありません。 ゾンビプロセスを殺すためにシステムを焼き付けることはできますが、それは実行可能な解決策ではありません;)

親プロセスにSIGCHLDシグナルを送信することを提案する人もいます。 しかし、それは無視される可能性が高くなります。 ゾンビプロセスを強制終了するもう1つのオプションは、その親プロセスを強制終了することです。 それは残酷に聞こえますが、ゾンビプロセスを殺す唯一の確実な方法です。

それで、最初に、ゾンビプロセスをリストしてIDを確認しましょう。 それはによって達成することができます psコマンドを使用する ターミナルでこのように。

ps ux | awk '{if($8=="Z+") print}'

ps uxコマンドの出力の8番目の列には、プロセスの状態が表示されます。 プロセスの状態がZ +(ゾンビの状態を示す)である一致するすべての行を印刷するように求めています。

プロセスIDを特定したら、親のプロセスIDを取得しましょう。

ps -o ppid= -p <child_id>

または、上記の2つのコマンドを次のように組み合わせて、ゾンビプロセスのPIDとその親プロセスのPIDを直接提供することもできます。

ps -A -ostat,pid,ppid | grep -e '[zZ]'

ここで親プロセスIDを取得するので、最後に、前に取得したそれぞれのIDプロセスを使用してコマンドラインを入力してプロセスを強制終了します。

kill -9 <parent_process_ID>

親プロセスを強制終了する

psコマンドを再度実行するか、topコマンドを実行することで、ゾンビプロセスが強制終了されたかどうかを確認できます。

おめでとうございます! これで、ゾンビプロセスを排除する方法がわかりました。

AbhishekPrakashからの入力あり。