Comment tuer les processus qui ne répondent pas à tuer -9

9

Je vois des processus sur mon SGI Altix 450 exécutant SLES 10.1 cesser de fonctionner (c'est-à-dire ne pas fournir de sortie supplémentaire dans leurs journaux pendant des heures). À ce stade, je veux tuer le processus incriminé afin de pouvoir le redémarrer. Le haut montre que le processus est à l'état (R). Bien que lorsque j'essaye de le tuer, rien ne se passe. Même lorsque j'utilise kill -9, il persiste. Dans ce cas, que puis-je faire d'autre que de redémarrer la machine?

Jared Brown
la source
2
Sont-ils définitivement le même identifiant de processus? Ce n'est pas que vous tuez le processus et qu'un démon relance un processus avec le même nom?
CK.

Réponses:

9

Il est possible que le processus soit tué mais attend que le parent recueille sa valeur de retour. Dans ce cas, après sa mort, il se trouverait dans l'état «Z» et non «R». Dans ce cas, vous devriez trouver un ppidprocessus utilisant la pscommande et tuer également le processus parent (si vous êtes vraiment sûr que cela ne causera aucun problème).

L'autre cas pourrait être que, pour une raison quelconque, le processus redémarre après avoir été tué comme tty. Dans ce cas, l'ID du processus doit changer à chaque fois que vous tuez -9. Vérifiez si l'ID de processus change à chaque fois que vous essayez de le tuer.

Saurabh Barjatiya
la source
Je crois que j'essaie de tuer le processus parent. C'est le processus parent qui est à l'état (R). pstree le confirme. Les processus enfants sont tous dans des états zombies (Z). Le ppid reste statique, donc je ne pense pas qu'il redémarre simplement.
Jared Brown
Si vous tuez le processus parent (et ses processus parents et ainsi de suite), init deviendra le parent des processus enfants qui sont à l'état 'Z' et collectera leur valeur de retour. Ainsi, la meilleure façon de supprimer les enfants «Z» dont le parent ne prend pas leur valeur de retour est de tuer le parent également afin que init devienne le parent des processus enfants morts.
Saurabh Barjatiya
C'est le problème que je rencontre. L'envoi d'un signal -9 via kill au processus parent ne met pas fin à celui-ci.
Jared Brown
1
L'envoi de SIGHUP au parent est parfois suffisant. Vous n'avez pas toujours besoin de tuer le parent.
Thomas
2
Je suis désolé, SIGCHLD. (trop tôt le matin)
Thomas
2

Le processus attend une ressource système, peut-être NFS? cela ne lui permet pas de «lâcher prise». J'adorerais entendre des solutions à ce problème au-delà du mien ...

redémarrez la boîte ou laissez le processus s'asseoir.

Je me demande si vous pourriez «arrêter» le processus via kill -STOP {PID} pour l'empêcher de consommer plus de CPU.

Le redémarrage devrait être possible même avec un autre processus arrêté, mais il peut nécessiter un port de liste ou un segment de mémoire partagée qui est toujours utilisé par l'autre processus.

ericslaw
la source
1
Un processus qui attendait NFS ou une fonction d'E / S pour se terminer ne serait-il pas dans un état (D)? Ces processus sont dans un état (R).
Jared Brown
C'est exactement ce qui m'arrive parfois lorsque je fais la lscommande sur un montage s3fs. Le lsprocessus ne tuera pas même avec kill -9jusqu'à ce que je force le démontage avecumount -l
Marco Marsala
0

Avez-vous déjà vérifié dmesg? J'ai vu cela après une panique du noyau; la seule façon de récupérer est de redémarrer (de préférence bientôt) - puis d'obtenir un noyau corrigé.

Les processus normaux non éliminables seront dans l'état D, pas R.

derobert
la source
Peut-on faire quelque chose à propos des processus durs de l'état D autre que le redémarrage? ppid = 1
Prof. Moriarty