web-dev-qa-db-fra.com

Comment tuer un processus <defunct> avec le parent 1

J'utilise Bacula sur une boîte RedHat. De temps en temps, le démon de stockage bacula-sd cesse de fonctionner et devient <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>

Ma question est, comment puis-je tuer ce processus? Son parent est 1, qui est init, pour autant que je sache, et je ne voudrais pas tuer le processus d'initialisation, n'est-ce pas?

Tuer ce processus normalement ne fonctionne pas:

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

L'aide est grandement appréciée!

Modifier: en cours d'exécution

[root@backup ~]# lsof -p 5825

produit la sortie suivante:

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

La seule façon de supprimer le processus zombie/défunt serait de tuer le parent. Étant donné que le parent est init (pid 1), cela endommagerait également votre système.

Cela vous laisse à peu près deux options.

  • Modifiez manuellement la table de processus, par exemple. créer un processus fictif, lier le processus défunt en tant qu'enfant du mannequin, puis les tuer. Assez dangereux et vous devrez peut-être nettoyer manuellement d'autres ressources de processus telles que les sémaphores et les descripteurs de fichiers.
  • Redémarrez le système.

J'irais avec le second.

18
Roy

Vérifiez s'il y a eu une panique du noyau,

# dmesg |tail

Vérifiez si le processus est en veille "D" Unkillable, où il est en mode noyau pour certains appels système qui ne sont pas encore retournés (oups du noyau, ou pour toute autre raison) http://www.nabble.com/What -causes-an-unkillable-process - td20645581.html

3
Prasanna

Si un zombie a init comme parent, alors init a cessé de fonctionner correctement. L'un des rôles de init est de nettoyer les zombies. S'il ne le fait pas, personne d'autre ne le fera. La seule solution est donc de redémarrer. Si l'initialisation est interrompue, un redémarrage peut échouer, donc j'arrêterais des services importants, synchroniserais le système de fichiers puis appuierais sur le bouton d'alimentation à la place.

3
MarkR

Vous pouvez essayer de redémarrer init:

 # telinit u

Sinon, je ne m'inquiéterais pas trop. Il ne fonctionne pas et ne prend aucune ressource et il est juste là pour que le noyau s'en souvienne.

3
David Pashley

Gardons la panique, d'accord? Un processus "défunt" ou "zombie" n'est pas un processus. Il s'agit simplement d'une entrée dans la table de processus, avec un code de sortie enregistré. Ainsi, un zombie ne détient aucune ressource, ne prend aucun cycle CPU et n'utilise aucune mémoire, car ce n'est pas un processus. N'obtenez pas tout bizarre et démangeant en essayant de "tuer" les processus zombies. Tout comme leurs homonymes, ils ne peuvent pas être tués, car ils sont déjà morts. Mais contrairement au type mangeur de cerveau, ils ne nuisent absolument à personne et ne mordront pas les autres processus.

Ne laissez pas les processus zombies dévorer votre cerveau. Ignore les.

2
Teddy

On dirait que vous avez un processus orphelin. Pour autant que je sache, la seule façon de les tuer serait de redémarrer la box. J'ai eu ce problème sur mes serveurs ESX (qui sont sous Linux sous le capot) de temps en temps et un redémarrage de l'hôte est le correctif (du support VMware).

Je suis un gars Windows alors prenez ça pour ce que ça vaut.

0
mrdenny