親1で<defunct>プロセスを強制終了する方法


17

RedHatボックスでBaculaを実行しています。ストレージデーモンbacula-sdは時々動作を停止し、になり<defunct>ます。

[root@backup ~]# ps -ef | grep defunct | more
root      4801 29261  0 09:25 pts/5    00:00:00 grep defunct
root      5825     1  0 Oct18 ?        00:00:00 [bacula-sd] <defunct>

私の質問は、このプロセスをどのように殺すことができますか?その親は1であり、これは私の知る限りinitであり、initプロセスを強制終了したくないのですか?

「通常」このプロセスを強制終了しても機能しません。

[root@backup ~]# kill -0 5825
[root@backup ~]# kill -9 5825

ヘルプは大歓迎です!

編集:実行中

[root@backup ~]# lsof -p 5825

次の出力が生成されます。

COMMAND    PID USER   FD   TYPE  DEVICE     SIZE    NODE NAME
bacula-sd 5825 root  cwd    DIR   253,0     4096 3801089 /root
bacula-sd 5825 root  rtd    DIR   253,0     4096       2 /
bacula-sd 5825 root  txt    REG   253,0  2110599  368004 /usr/local/sbin/bacula-sd
bacula-sd 5825 root  mem    REG   253,0    75284  389867 /usr/lib/libz.so.1.2.3
bacula-sd 5825 root  mem    REG   253,0    46680 3604521 /lib/libnss_files-2.5.so
bacula-sd 5825 root  mem    REG   253,0   936908  369115 /usr/lib/libstdc++.so.6.0.8
bacula-sd 5825 root  mem    REG   253,0   125736 3606807 /lib/ld-2.5.so
bacula-sd 5825 root  mem    REG   253,0  1602128 3606885 /lib/libc-2.5.so
bacula-sd 5825 root  mem    REG   253,0   208352 3606892 /lib/libm-2.5.so
bacula-sd 5825 root  mem    REG   253,0   125744 3606887 /lib/libpthread-2.5.so
bacula-sd 5825 root  mem    REG   253,0    25940 3604573 /lib/libacl.so.1.1.0
bacula-sd 5825 root  mem    REG   253,0    15972 3604535 /lib/libattr.so.1.1.0
bacula-sd 5825 root  mem    REG   253,0    46548 3606908 /lib/libgcc_s-4.1.2-20080102.so.1
bacula-sd 5825 root  mem    REG   253,0 56422480  366368 /usr/lib/locale/locale-archive
bacula-sd 5825 root    0r   CHR     1,3             1545 /dev/null
bacula-sd 5825 root    1r   CHR     1,3             1545 /dev/null
bacula-sd 5825 root    2r   CHR     1,3             1545 /dev/null
bacula-sd 5825 root    3u   CHR   9,128             6469 /dev/nst0
bacula-sd 5825 root    4u  IPv4 1023380              TCP backup:bacula-sd (LISTEN)
bacula-sd 5825 root    5u  IPv4 2693268              TCP backup:bacula-sd->backup:53957 (CLOSE_WAIT)
bacula-sd 5825 root    7u  IPv4 3248683              TCP backup:bacula-sd->backup:57629 (CLOSE_WAIT)
bacula-sd 5825 root    8u  IPv4 3250966              TCP backup:bacula-sd->backup:37650 (CLOSE_WAIT)
bacula-sd 5825 root    9u  IPv4 3253908              TCP backup:bacula-sd->backup:37671 (CLOSE_WAIT)

回答:


18

ゾンビ/無効なプロセスを削除できる唯一の方法は、親を殺すことです。親はinit(pid 1)なので、システムもダウンします。

これには、2つのオプションがあります。

  • プロセステーブルを手動で変更します。ダミープロセスを作成し、無効なプロセスをダミーの子としてリンクし、それらを強制終了します。非常に危険であり、セマフォやファイルハンドルなどの他のプロセスリソースを手動でクリーンアップする必要があります。
  • システムを再起動します。

二番目に行きます。


2
+1。ただし、より多くのゾンビプロセスが表示されないか、ゾンビプロセスがRAMの4Gをロックしない限り、急ぐ必要はありません。:)
カイルスミス

1
「親はinit(pid 1)であるため、システムもダウンします」init-SIGKILLのシグナルハンドラがないため、強制終了できません。をご覧くださいman 2 kill
コーフランド

最初の方法は?
スケリット14

@AndrewH SIGKILLがターゲットプロセスのシグナルハンドラに依存するかどうかはわかりませんが、典型的なカーネルがSIGKILLを無視して初期化するのは事実です。ただし、カーネルパニックを引き起こすクールな方法を使い果たした場合、ほとんどのLinuxシステムでSIGSEGVが非常にうまく機能することがわかると思います。
ロイ

1
initのジョブの1つはゾンビプロセスを刈り取ることであることに注意する必要がありinitます。ただし、ほとんどinitのsは、 これを修正するハンドラをSIGCHLDに設定する必要がSIG_IGNあります。
cyphar

3

initを再起動してみてください:

 # telinit u

そうでなければ、私はあまり心配しません。実行されておらず、リソースを消費しておらず、カーネルが記憶できるようにそこにあります。


1
まあ、私は心配する必要があります。これは、バックアップ(bacula)およびvoip(アスタリスク)サービスを実行している実稼働マシンです。廃止されたbacula-sdプロセスがある限り、
bacula

ファイルを開いてはいけません。lsof -p 5825を実行して確認します。
デビッドパシュリー

まあ、多くのものが開いているようです...上記を参照してください。私にできることはありますか?私は... lsofのを使ったことがない
アンドレアス・時間

1
ゾンビは/ dev / nst0を開いています。この時点では、おそらくシステムの再起動が最善策です。
カイルスミス

5
はい、再起動が一般的な答えのようです。サーバーを再起動する必要があるとき、私はいつも失敗したように感じます。:(
デビッドパシュリー

3

カーネルパニックが発生したかどうかを確認し、

# dmesg |tail

プロセスが「D」Unkillable sleepになっているかどうかを確認します。このモードでは、まだ返されていないsyscallのカーネルモードです(カーネルoops、またはその他の理由) 。http://www.nabble.com/What-c​​auses-an -unkillable-process--td20645581.html


迷惑なフォーマット
asdmin

実際、カーネルパニックは発生していません。プロセスは 'Z'状態-ゾンビ...
andreas-h

3

ゾンビが親としてinitを持っている場合、initは正常に動作しなくなりました。initの役割の1つは、ゾンビをクリーンアップすることです。実行しない場合、他の誰も実行しません。したがって、唯一の解決策は再起動することです。initが壊れていると、リブートが失敗する可能性があるため、重要なサービスをシャットダウンし、ファイルシステムを同期してから、代わりに電源ボタンを押します。


initが正しく機能しないことに同意します。参照してください:upstartsystemd
ミッコランタライネン

2

パニックを抑えましょうか?「無効」または「ゾンビ」プロセスプロセスではありません。これは、プロセステーブル内の単純なエントリであり、終了コードが保存されています。したがって、ゾンビはプロセスではないため、リソースを保持せず、CPUサイクルを消費せず、メモリも使用しません。ゾンビプロセスを「殺す」ためにすべての奇妙でかゆみを取得しないでください。彼らの名前と同じように、彼らはすでに死んでいるので、殺すことはできません。しかし、脳を食べる種類とは異なり、彼らは絶対に誰にも害を与えず、他のプロセスを噛みません。

ゾンビプロセスがあなたの脳を食べさせないでください。無視してください。


11
はい、それが理論です。残念ながら、常にそうとは限りません。andreashで明確に文書化されているように、無効なプロセスがシステムリソースにハングアップすることがあります。
ロイ

5
彼の場合、ゾンビプロセスはlsof出力に従って/ dev / nst0の頭脳を食い尽くしています。彼はバックアップ操作を続けるためにそれらの頭脳を必要とします。
カイルスミス

2
ゾンビのプロセスを無視して自分のキャリアを過ごすシステム管理者は、最終的には夜中に目が覚め、彼らの人生は吸い込まれます。私の経験では、ゾンビは何か間違っていることを示しています。ゾンビの子供が親と何らかの奇妙な相互作用を持ち、親が私のCPUを回転させているとしても、これらを書きます。誰のせいなのかわかりませんが、ポイントはゾンビがくて、いつかはあなたを悩ませるようになることです。...ある日...あなたは冷たい秋の日の後に...夜中に...平和に眠っている時...
マイク・S

@MikeSあなたのコメントから大笑いしました!
ポールカラブロ

@MikeSにはがあります。ssh-agentが無効になっており、sshもgitも正しく実行できません。再起動のみが役立ちます。(Windowsが持っているのと同じ修正...ハハ)
ジョン部族

0

孤立したプロセスがあるようです。私が知る限り、これらを殺す唯一の方法は、ボックスを再起動することです。ESXサーバー(内部のLinux)でこれが時々発生し、ホストの再起動が修正されました(VMwareのサポートによる)。

私はWindowsの男なので、その価値があると考えてください。


残念ながら、再起動は現実的なオプションではありません。それは私が勤務時間中にそれを再起動することはできませんので、生産機械はまた、VoIPサービスを実行しているのです...
アンドレアス・時間

1
営業時間後に再起動できますよね?
ウォーレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.