再起動しないと強制終了できないプロセスを強制終了するにはどうすればよいですか?


11

強制終了できない5つのプロセスがありkill -9 $PID、実行するcat /proc/$PID/cmdlineと現在のセッションがハングします。多分それらはゾンビプロセスです。

実行ps -ef or htopすると、現在のセッションもハングします。しかしtopps -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
ゾンビプロセスは問題を引き起こしません。ゾンビプロセスの数が多すぎてサーバーのプロセス制限を超える場合、問題が発生します。
ラザ2013

@Salton:ps -efとhtopを使用できないため、いくつかの問題が発生しました。表示されているのはゾンビプロセスと呼ばれていないのではないでしょうか。
Sam Stoelinga 2013

1
あなたが/usr/bin/strace ps -ef正確にあなたps -efがぶら下がっている場所を確認するために使用することによってトレースを試みることができます。
ラザ2013

2
これらはどのようにしてゾンビであると判断しましたか?これは、ハングしているプロセスのように見えます。ないps -el仕事と状態は、これらのプロセスはしていますか?
Nils

最終的に、クライアントは問題がどんどん悪化しているため、マシンを再起動することを決定しました。すべての入力をありがとう。ゾンビと中断のないプロセスについて多くを学びました。
Sam Stoelinga 2013

回答:


22

あなたはゾンビを持っていません。cat /proc/$PID/cmdlineゾンビでは問題ありません。kill -9がプログラムを強制終了しない場合、プログラムが中断できないI / O操作を実行していることを意味します。これは通常、次の3つのうちの1つを示します。

  • 応答しないネットワークファイルシステム。
  • カーネルのバグ。
  • ハードウェアのバグ。

などのユーティリティpsは、上記のいずれかの理由でカーネルが提供していないプロセス実行可能パスなどの情報を読み取ろうとするとハングすることがあります。

cat /proc/16181/syscall16181が実行しているプロセスを確認してください。これは、システムの距離に応じて機能する場合と機能しない場合があります。

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


猫は決して反応しません。これはバグだとは思いません。「特徴」だと思います。
フクロウ

7

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

ゾンビプロセスがハングすることはありませんので、問題ではないようです。システムコールまたはドライバーがハングしている場合、プロセスは中断できない状態にある可能性があります。ここで良い説明があります


ゾンビプロセスが多すぎると、プロセステーブル内のスペースを占有し続けるため、fork(ハードnrpocに到達したときに)成功を妨げることがあります。
dhchdhd 2017

2

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()て、ゾンビプロセスを取得します。


これが本当の答えです。親の殺害はうまくいきました。
アンドリュー

1

ゾンビを殺すには、その親を殺す必要があります。ゾンビプロセスはすべてのリソースを解放し、その終了ステータスが親によって取得されるのを待機しています。親が子waitから終了ステータスを取得することを実行しない場合、ゾンビになります。ゾンビの親を殺すinitと、終了ステータスが取得され、最終的にゾンビは死にます。


だからあなたは私にinitを殺して欲しいのですか?それは笑ごめん質問から明らかではないが、親はinitにしているようだ:(私は質問を編集した。
サムStoelinga

4
いいえ、ゾンビを殺そうとしないでください。ゾンビを殺すことはできません。このFAQはUnix自体と同じくらい古いものです。
Tripleee 2013

@tripleee:そうだね。多分私が持っているのはゾンビではありません。htopが機能せず、cat / proc / $ pid / cmdlineまたはls / proc / $ pid /も機能しません。通常、これはゾンビでは発生しません。そのため、私がここで尋ねた理由は、これは一般的な問題ではありません。私はいくつかの回答を確認しましたが、すべてあなたに親を殺すように言っています。
Sam Stoelinga 2013

1
「親を殺す」は、通常のゾンビを刈り取る方法です。あなたは殺すことはできませんinit。ゾンビがの下initで親を変更した場合、それを殺すことはできません。
tripleee 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.