web-dev-qa-db-ja.com

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

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)
17
andreas-h

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

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

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

私は2番目に行きます。

18
Roy

カーネルパニックがあったかどうかを確認します。

# dmesg |tail

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

3
Prasanna

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

3
MarkR

あなたはinitを再起動してみることができます:

 # telinit u

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

3
David Pashley

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

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

2
Teddy

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

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

0
mrdenny