再起動せずにゾンビプロセスを強制終了する方法はありますか?


48

再起動せずにゾンビプロセスを強制終了する方法はありますか?これがどのように起こったかです:

トレントを使用して12GBファイルをダウンロードしたい。.torrentファイルを追加した後、送信はゾンビプロセスに変わりました(私もktorrentを試しました。同じ動作です)。最後に、µTorrentを使用してファイルをダウンロードできましたが、プログラムを閉じると、ゾンビになります。

私が使用してみましたkillskillそしてpkillさまざまなオプションとして-9、信号が、成功しません。

Webでいくつかのソリューションを読んだ後、親を殺すとゾンビを殺すことができることがわかりました。しかし、ワインを殺しても助けにはなりませんでした。

別の方法はありますか?

編集:

ps -o pid、ppid、stat、comm

PID  PPID STAT COMMAND
7121  2692 Ss   bash
7317  7121 R+   ps

pstreeの出力:

init─┬─GoogleTalkPlugi───4*[{GoogleTalkPlug}]
 ├─NetworkManager─┬─dhclient
 │                └─{NetworkManager}
 ├─acpid
 ├─amarok───19*[{amarok}]
 ├─apache2───5*[apache2]
 ├─atd
 ├─avahi-daemon───avahi-daemon
 ├─bonobo-activati───{bonobo-activat}
 ├─clock-applet
 ├─console-kit-dae───63*[{console-kit-da}]
 ├─cron
 ├─cupsd
 ├─2*[dbus-daemon]
 ├─2*[dbus-launch]
 ├─desktopcouch-se───desktopcouch-se
 ├─firefox───run-mozilla.sh───firefox-bin─┬─plugin-containe───8*[{plugin-contain}]
 │                                        └─14*[{firefox-bin}]
 ├─gconfd-2
 ├─gdm-binary─┬─gdm-simple-slav─┬─Xorg
 │            │                 ├─gdm-session-wor─┬─gnome-session─┬─bluetooth-apple
 │            │                 │                 │               ├─compiz───sh───gtk-window-deco
 │            │                 │                 │               ├─fusion-icon
 │            │                 │                 │               ├─gdu-notificatio
 │            │                 │                 │               ├─gnome-panel───{gnome-panel}
 │            │                 │                 │               ├─gnome-power-man
 │            │                 │                 │               ├─gpg-agent
 │            │                 │                 │               ├─gwibber-service
 │            │                 │                 │               ├─nautilus
 │            │                 │                 │               ├─nm-applet
 │            │                 │                 │               ├─polkit-gnome-au
 │            │                 │                 │               ├─2*[python]
 │            │                 │                 │               ├─qstardict───{qstardict}
 │            │                 │                 │               ├─ssh-agent
 │            │                 │                 │               ├─tracker-applet
 │            │                 │                 │               ├─trackerd
 │            │                 │                 │               ├─wakoopa─┬─wakoopa
 │            │                 │                 │               │         └─3*[{wakoopa}]
 │            │                 │                 │               └─{gnome-session}
 │            │                 │                 └─{gdm-session-wo}
 │            │                 └─{gdm-simple-sla}
 │            └─{gdm-binary}
 ├─6*[getty]
 ├─gnome-keyring-d───2*[{gnome-keyring-}]
 ├─gnome-screensav
 ├─gnome-settings-
 ├─gnome-system-mo
 ├─gnome-terminal─┬─bash───ssh
 │                ├─bash───pstree
 │                ├─gnome-pty-helpe
 │                └─{gnome-terminal}
 ├─gvfs-afc-volume───{gvfs-afc-volum}
 ├─gvfs-fuse-daemo───3*[{gvfs-fuse-daem}]
 ├─gvfs-gdu-volume
 ├─gvfsd
 ├─gvfsd-burn
 ├─gvfsd-computer
 ├─gvfsd-metadata
 ├─gvfsd-trash
 ├─hald─┬─hald-runner─┬─hald-addon-acpi
 │      │             ├─hald-addon-cpuf
 │      │             ├─hald-addon-inpu
 │      │             └─hald-addon-stor
 │      └─{hald}
 ├─indicator-apple
 ├─indicator-me-se
 ├─indicator-sessi
 ├─irqbalance
 ├─kded4
 ├─kdeinit4─┬─kio_http_cache_
 │          └─klauncher
 ├─kglobalaccel
 ├─modem-manager
 ├─multiload-apple
 ├─mysqld───10*[{mysqld}]
 ├─named───10*[{named}]
 ├─nmbd
 ├─notification-ar
 ├─notify-osd
 ├─polkitd
 ├─pulseaudio─┬─gconf-helper
 │            └─2*[{pulseaudio}]
 ├─rsyslogd───2*[{rsyslogd}]
 ├─rtkit-daemon───2*[{rtkit-daemon}]
 ├─smbd───smbd
 ├─snmpd
 ├─sshd
 ├─timidity
 ├─trashapplet
 ├─udevd───2*[udevd]
 ├─udisks-daemon─┬─udisks-daemon
 │               └─{udisks-daemon}
 ├─upowerd
 ├─upstart-udev-br
 ├─utorrent.exe───{utorrent.exe}
 ├─vnstatd
 ├─winbindd───2*[winbindd]
 ├─wnck-applet
 ├─wpa_supplicant
 └─xinetd

システムモニターと上部には、ゾンビプロセスがリソースを使用していることが示されます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

編集2: 私は何かを見つけたと思う。ログアウトしようとすると、次のメッセージが表示されました。

ここに画像の説明を入力してください

他のTorrentクライアントにも同じ問題があるため、おそらくファイルサイズに関するものかもしれません。ext4パーティションでubuntu 10.04を使用しています。


ps -o pid,ppid,stat,commとの出力をpstree質問に追加できますか?
ミケル

私はここで同じ問題を抱えており、グーグルで検索した後、インストール中にホームフォルダを暗号化し、4GB以上のトレントをダウンロードすることを選択したときに発生するようです。99%のCPUを消費するゾンビプロセスを取り除くための再起動以外の方法を見つけることができませんでした。bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/431975は、これに対処するようだが、何もずっとこの:(を解決するために行われているように思わない
user972876

こちらもお読みください:askubuntu.com/questions/48624/what-are-zombie-processesこれは多くの疑問を解決するのに役立ちます。
ルイスアルバラード

回答:


41

私はゾンビプロセスが頭痛の種であるということはありません。ゾンビプロセスはリソースを消費しません。プロセステーブルにエントリがあるだけです。

ゾンビプロセスは孤立したプロセスではなく、親を持っています。

killskill pkillエントリが削除されていないというだけで、プロセスは既に終了しているため機能しません。

ゾンビプロセスはSIGCHLD、親にシグナルを送信することで強制終了できます。私はの信号数が考えるSIGCHLDあります1718

これも失敗する場合は、親自体を殺すことができます。

SIGCHLDシグナルに関するウィキペディアから:

親がwaitを呼び出す前に子プロセスが終了すると、カーネルはプロセスに関する情報を保持して、後で親がwaitを呼び出せるようにします。子はまだシステムリソースを消費しているが実行していないため、ゾンビプロセスと呼ばれます。


編集1:消費されるシステムリソースのほとんどはプロセステーブルエントリです。メモリまたはCPUサイクルを消費するかどうかを誰かが知っている場合は、説明を追加してください。私の知る限り、それはほとんど重要なシステムリソースを占有しません。


編集2:ウィキペディアからの引用

UnixおよびUnixライクなコンピューターオペレーティングシステムでは、ゾンビプロセスまたは機能しないプロセスは、実行は完了したがプロセステーブルにエントリが残っているプロセスです。このエントリは、(現在のゾンビ)プロセスを開始したプロセスが終了ステータスを読み取るために必要です。

そのため、子プロセスが終了した瞬間、親はおそらく状態になっていないか、終了ステータスを読み取る準備ができていないため、親プロセスが終了ステータスを知ることができるようにエントリが保持されます。


編集3

今まで、CPUの100%を使用するゾンビプロセスを経験したことがありません。これを初めて見る。

やってみて killall utorrent.exe

のインスタンスが2 utorrent.exeつあり、そのうちの1つがゾンビであることがわかります。おそらく2番目(子)。killallは、子(ゾンビ)を殺すことができないため、親を殺すべきです。


編集4

KILLの代わりにTERMシグナルを与えていたため、killallは機能しなかったようです。

試してみる killall --signal=KILL utorrent.exe

これが機能しない場合は、プロセスを選択的に強制終了してみてください。

utorrent.exeプロセスPIDのリストを取得します

ps -e | grep -i utorrent

次のような2つのプロセスを取得する必要があります

xxxx ?        aa:bb:cc utorrent.exe defunct
yyyy ?        aa:bb:cc utorrent.exe

したがって、2番目は親です。使用して殺す

-9 yyyyを殺す

編集5

このbashコマンドでプロセスの親IDを見つけてみてください

cat / proc / {defunctpid} / status | grep -i ppid

あなたの場合は

cat / proc / 7298 / status | grep -i ppid

出力が次のようになる場合

PPid:1

それから悲しいことに、私はあなたが運が悪いと思います。プロセスID 1はinitに属し、それなしではシステムを実行できません


2
あなたが書いA zombie process does not take up any resourcesて引用しましたthe child is still consuming system resources ... it is known as a zombie process
-maaartinus

うん。投稿を更新して、意味を明確にしました。
マニッシュシンハ

7
ゾンビプロセスはCPUコアの1つを完全に使用します。そのコアの使用率は100%です。プロセステーブルエントリだけではなく、質問に追加情報を追加します。
ペドラム

3
CPUを使用するゾンビがバックグラウンドスレッドを実行している可能性があります。top -H上のプロセスではなくスレッドを表示するために使用してみてください。
ザンリンクス

1
無効なプロセスの主な問題は、最終的に使用されるポートを使用し続けることです。
ピエトロビスマラ

10

killプロセスはすでに死んでいるので、プロセス自体での使用は実際には効果がありません。killライブプロセスをゾンビ状態にします。

親プロセスは、プロセスの終了コードを取得します。これが完了するまで、プロセスはゾンビのままです。initプロセスは、それが直接の子孫であるすべてのゾンビをクリーンアップします「最後の手段」親である、任意のプロセスの終了コードをピックアップし、それを捨てるでしょう。

ゾンビプロセスの親を強制終了するinitと、親プロセスがなくなるとすぐに親に戻るため(つまり、親を強制終了するとそのプロセスがゾンビになり、祖父母が親の終了コードを読み取ったため) 、したがって、親は本当にいなくなります)。ゾンビはゾンビの親になることができるため、単に親を殺すだけでは十分ではなく、別のプロセス自体によって収集する必要もあります。

プロセスは孫をクリーンアップする責任を負わないことに注意してください-常に親としてプロセス1に戻るため(デーモン作成者は時々double fork()を使用し、途中でプロセスを終了して、呼び出しから子プロセスを完全に分離します)シェル)

殺すことがwineおそらく効果的でない理由は、それが実際にゾンビプロセスの親ではなかったからです。むしろ、initの直接の子孫である「utorrent.exe」がそうです。ただし、このプロセスは通常どおり実行され、その任務を無視しています。


情報をありがとう。しかし、解決策は何ですか?
ペドラム

1
キリング本当の親プロセスを、その1つのすなわちps wauxでリストPPIDゾンビの列が。
サイモンリヒター

pstreeの出力でわかるように、「utorrent.exe」には親がありません。
ペドラム

その名前を持つ2つのプロセスがあり、一方は他方の子です。ゾンビは子供だと思うので、親の「utorrent.exe」プロセスがクリーンアップを担当します。そのプロセスを強制終了すると、initは親をクリーンアップします。その後、子はinitに再アタッチされ、すぐにクリーンアップされます。
サイモンリヒター

その場合、killallは機能しませんでした。µTorrentを起動しましたが、親も子もありませんが、まだ削除できません。pstree出力が更新されます。
ペドラム

3

killall、-9などよりもはるかに簡単な方法:

1)コンソールuTorrentの代わりにqBitorrentを使用してください(GUIバージョンも待っていますが、qBitorrentは基本的にそれです)。

2)11.04以降を使用している場合は、alt + f2を押して(特別なコマンドウィンドウを開きます)、xkillと入力すると、マウスがxになります。終了するプログラム(UI =プロセスID)をクリックすると、強制終了されます。

高度なヒント:G15マクロキーボードのように、「xkill」のキーボードショートカットをバインドします。


1

私の場合、ワインがハングアップし、ショットガンでゾンビの子供を殺すことができないとき:

wineserver -k次に、「プロセスの息子」を殺しますkillall -9 Oblivion.exe(たとえば)

私が理解しているのは、wineserverがすべてのゾンビチャイルズに彼らがすべて死ぬという信号を送ることです(あなたが知っているショットガンのせいで)。だから私は追加killall -9またはkill -9プロセスのIDで行います。


伝送とktorrent以外にも同じ問題があり、ワインとは何の関係もありません。
ペドラム

私は、ワインが親であり、子供がutorrentであるutorrentの使用についての部分に言及していました。とにかく、親に信号を送って、その子がゾンビであることを知らせようとしましたか(親には準備ができていないもの)。例:kill -s SIGCHLD ppid
ルイスアルバラード

また、どの種類のハードウェアを使用しているので、ゾンビがリソースを最大限に使用する方法を見つけるのに役立つかもしれません。
ルイスアルバラード

残念ながらどちらも機能しません。
ペドラム

私のプロセッサはコアi7 860です
。–ペドラム

-4

私の推測では、SSDを使用しているのでしょう。

トレントクライアントに大きなトレントを追加すると、ダウンロードするトレントの「プレースホルダー」ファイルは実際にディスク上に作成されますが、ダウンロードプロセス中に徐々に満たされるまで空です。

通常のハードディスクでは、ディスクがボトルネックであり、デスクトップの他の部分でパフォーマンスの問題に気付くことはありません。

ただし、SSDを使用すると、CPUがボトルネックになり、アプリケーションがクラッシュしたように見えます(灰色になります)。しばらく放置すると回復し、すべてが順調になります。これはSSDに切り替えてからの私の経験です。

強制終了プロセスに関しては、他の人が私よりも良いアドバイスを提供しました-KILLシグナルを使用すると通常は機能しますが、長年にわたって再起動を必要とする奇妙なものがありました。


1
ありがとう、しかし私は通常のハードディスクを使用しています。
ペドラム

1
「しかし、SSDを使用する場合、CPUがボトルネックであり、アプリケーションがクラッシュしたように見えます(灰色になります。しばらく放置すると回復し、すべて正常になります。)」その状況では、プロセスはゾンビではありません。ゾンビのプロセスと無停電睡眠中のプロセスは同じものではありません。ゾンビプロセスは実際にはもう実行されておらず、リソースを占有せず(プロセステーブル内の1つのエントリを除く)、回復することはできません。
エリアケイガン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.