再起動しないと終了できないプロセスを終了するには?

再起動しないと終了できないプロセスを終了するには?

終了できないプロセスが5つあり、kill -9 $PID実行時にcat /proc/$PID/cmdline現在のセッションが中断されます。たぶんゾンビプロセスかもしれません。

実行すると、ps -ef or htop現在のセッションも中断されます。しかし、うまくtopいきps -eます。

したがって、ファイルシステムが応答しないのに2つの問題があるようです。

これは仮想マシンを実行している本番マシンなので、再起動できません。

次のプロセスIDは機能しません:16181 16765 5985 7427 7547

これらのプロセスの親プロセスはinitです。

        ├─collectd(16765)─┬─{collectd}(16776)
        │                 ├─{collectd}(16777)
        │                 ├─{collectd}(16778)
        │                 ├─{collectd}(16779)
        │                 ├─{collectd}(16780)
        │                 └─{collectd}(16781)
        ├─collectd(28642)───{collectd}(28650)
        ├─collectd(29868)─┬─{collectd}(29873)
        │                 ├─{collectd}(29874)
        │                 ├─{collectd}(29875)
        │                 └─{collectd}(29876)

Qemuプロセスの1つが機能しない

|-qemu-system-x86(16181)-+-{qemu-system-x86}(16232)
|                        |-{qemu-system-x86}(16238)
|                        |-{qemu-system-x86}(16803)
|                        |-{qemu-system-x86}(17990)
|                        |-{qemu-system-x86}(17991)
|                        |-{qemu-system-x86}(17992)
|                        |-{qemu-system-x86}(18062)
|                        |-{qemu-system-x86}(18066)
|                        |-{qemu-system-x86}(18072)
|                        |-{qemu-system-x86}(18073)
|                        |-{qemu-system-x86}(18074)
|                        |-{qemu-system-x86}(18078)
|                        |-{qemu-system-x86}(18079)
|                        |-{qemu-system-x86}(18086)
|                        |-{qemu-system-x86}(18088)
|                        |-{qemu-system-x86}(18092)
|                        |-{qemu-system-x86}(18107)
|                        |-{qemu-system-x86}(18108)
|                        |-{qemu-system-x86}(18111)
|                        |-{qemu-system-x86}(18113)
|                        |-{qemu-system-x86}(18114)
|                        |-{qemu-system-x86}(18119)
|                        |-{qemu-system-x86}(23147)
|                        `-{qemu-system-x86}(27051)

答え1

あなたにはゾンビはありません。cat /proc/$PID/cmdlineゾンビの処理に問題はありません。もしkill -9プログラムを殺すことはありませんこれは、プログラムが中断することなくI / O操作を実行していることを意味します。これは通常、次の3つのうちの1つを表します。

  • ネットワークファイルシステムが応答しません。
  • カーネルエラー;
  • ハードウェアエラーです。

ps上記の理由の1つによってカーネルが提供しないプロセス実行パスなどの特定の情報を読み取ろうとすると、ユーティリティが中断される可能性があります。

努力するcat /proc/16181/syscall16181がどのプロセスを実行しているかを確認してください。システムの実行方法に応じて動作する場合と動作しない場合があります。

問題がネットワークファイルシステムの場合は、強制的にマウントまたはオンラインに切り替えることができます。問題がカーネルまたはハードウェアのエラーである場合に実行できる手順は、エラーの性質によって異なります。再起動(固定カーネルへのアップグレードまたは破損したハードウェアの交換)を強くお勧めします。

答え2

他の答えは、これがゾンビプロセスであると仮定しています。ゾンビプロセスは、実行が完了したが親プロセスが終了ステータスを知りたい場合に備えて、まだプロセステーブルに残っているプロセスです。これは通常の現象であり、init割り当てられたゾンビプロセスを自動的にクリーンアップします。

ゾンビプロセスは中断を引き起こさないので、これは問題ではないかのように聞こえます。システムコールまたはドライバの停止の場合、プロセスは中断できない可能性があります。説明が良いです。ここ

答え3

Linuxでゾンビプロセスを見つけるには:

$ ps axo stat、ppid、pid、comm grep -w無効|

Z 555 10242クソゾンビ<もう存在しない>

まず、killコマンドを使用して、ゾンビプロセスの親プロセスにSIGCHLD信号を送信できます。上記のコマンドは、各ゾンビプロセスのPPID(親プロセスのPID)を提供します。この例では、ゾンビのPPIDはです555

$ sudo Kill -s SIGCHLD 555

ゾンビプロセスがまだ消えていない場合は、ゾンビプロセスの親プロセス(555など)を終了できます。

$ sudo kill -9555

親プロセスが終了すると、ゾンビプロセスはLinux上のすべてのプロセスの親プロセスであるinitプロセスによって採用されます。 initプロセスはwait()ゾンビプロセスを選択するために定期的に呼び出されます。

答え4

ゾンビの両親を殺さなければ、ゾンビを殺すことができます。ゾンビプロセスはすべてのリソースを解放し、親プロセスが終了ステータスを取得するのを待っています。親プロセスがwait子プロセスの終了状態を取得するために実行されない場合、ゾンビになります。ゾンビの両親を殺すとinit終了状態になり、ゾンビは最終的に死にます。

関連情報