kill -9 $PID
で強制終了できない5つのプロセスがあり、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)
あなたはゾンビを持っていません。 cat /proc/$PID/cmdline
はゾンビに問題はありません。もし kill -9
はプログラムを強制終了しません 、それはプログラムが割り込み不可能なI/O操作を実行していることを意味します。これは通常、次の3つのうちの1つを示します。
ps
などのユーティリティは、上記のいずれかの理由でカーネルが提供していないプロセス実行可能パスなどの情報を読み取ろうとするとハングする場合があります。
お試しください cat /proc/16181/syscall
16181が実行しているプロセスを確認します。これは、システムの距離に応じて機能する場合と機能しない場合があります。
問題がネットワークファイルシステムである場合は、強制的にアンマウントするか、オンラインにすることができます。問題がカーネルまたはハードウェアのバグである場合、何ができるかはバグの性質によって異なります。再起動(および固定カーネルへのアップグレード、または壊れたハードウェアの交換)を強くお勧めします。
他の答えは、これらがゾンビプロセスであると想定しています。ゾンビプロセスは実行が終了したプロセスですが、親が終了ステータスを知りたい場合に備えて、まだプロセステーブルにあります。これらは正常であり、init
はそれに割り当てられたゾンビプロセスを自動的にクリーンアップします。
ゾンビプロセスが原因でハングアップすることはないため、問題ではないようです。システムコールまたはドライバーがハングしている場合、プロセスは中断できない状態にある可能性があります。良い説明があります ここ 。
Linuxでゾンビプロセスを見つけるには:
$ ps axo stat、ppid、pid、comm | grep -w defunct
Z 555 10242くそーゾンビ<廃止>
まず、killコマンドを使用して、ゾンビの親プロセスにSIGCHLDシグナルを送信してみることができます。上記のコマンドは、各ゾンビのPPID(親プロセスのPID)を提供することに注意してください。この例では、ゾンビのPPIDは_555
_です。
$ Sudo kill -s SIGCHLD 555
それでもゾンビプロセスが消えない場合は、ゾンビの親プロセス(555など)を強制終了できます。
$ Sudo kill -9 555
親プロセスが終了すると、ゾンビはLinuxのすべてのプロセスの親であるinitプロセスによって採用されます。 initプロセスは定期的にwait()
を呼び出して、ゾンビプロセスを取得します。
ゾンビを殺すには、その親を殺す必要があります。ゾンビプロセスはすべてのリソースを解放し、その終了ステータスが親によって取得されるのを待機しています。親が子から終了ステータスを取得するためにwait
を実行しない場合、ゾンビになります。ゾンビの親を殺すと、init
が終了ステータスを取得し、最終的にゾンビが死亡します。