Je suis toujours très hésitant à courir kill -9
, mais je vois d’autres administrateurs le faire presque systématiquement.
Je pense qu'il y a probablement un juste milieu raisonnable, donc:
- Quand et pourquoi devrait-
kill -9
on utiliser? Quand et pourquoi pas - Que faut-il essayer avant de le faire?
- Quel type de débogage un processus "bloqué" pourrait causer d'autres problèmes?
Réponses:
Généralement, vous devriez utiliser
kill
(raccourci pourkill -s TERM
, ou sur la plupart des systèmeskill -15
) avantkill -9
(kill -s KILL
) pour donner au processus cible une chance de se nettoyer lui-même. (Les processus ne peuvent ni intercepter ni ignorerSIGKILL
, mais ils le peuvent et le font souventSIGTERM
.) Si vous ne donnez pas au processus la possibilité de terminer et de nettoyer, il risque de laisser des fichiers corrompus (ou un autre état) autour de lui. ne sera pas capable de comprendre une fois redémarré.strace
/truss
,ltrace
Etgdb
sont généralement bonnes idées pour regarder pourquoi un processus bloqué est bloqué. (truss -u
Solaris est particulièrement utile; je trouveltrace
trop souvent que les arguments des appels de bibliothèque sont présentés dans un format inutilisable.) Solaris dispose également d’/proc
outils utiles , dont certains ont été portés sous Linux. (pstack
est souvent utile).la source
kill -9
a son utilité, en tant que terminateur de dernier recours, l'accent étant mis sur le dernier recours; Les administrateurs qui l'utilisent avant le dernier recours a) ne comprennent pas trop bien être un administrateur et b) ne devraient pas être sur un système de production.Randal Schwartz publiait fréquemment "Utilisation inutile de (x)" sur les listes. Un de ces articles parlait de
kill -9
. Il comprend des raisons et une recette à suivre. Voici une version reconstruite (citée ci-dessous).la source
Cela devrait toujours être acceptable
kill -9
, tout comme il devrait toujours être acceptable de s’arrêter en tirant sur le câble d’alimentation. C’est peut-être antisocial et laisser une certaine reprise à faire, mais cela devrait fonctionner et est un outil puissant pour les impatients.Je dis cela en tant que personne qui essaiera d'abord de tuer simplement (15), parce que cela donne à un programme une chance de nettoyer, peut-être simplement d'écrire dans un journal "sortant du signal 15". Mais je n'accepterai aucune plainte pour mauvaise conduite sur un kill -9.
La raison: beaucoup de clients font ce que les programmeurs préfèrent ne pas faire. Le test aléatoire de mise à mort -9 est un scénario de test correct et juste. Si votre système ne le gère pas, votre système est en panne.
la source
kill -9
comme si ce n'était pas correct de débrancher la prise. Bien sûr, il existe des situations dans lesquelles vous n’avez pas le choix, mais cela devrait être une action de dernier recours. Bien sûr, tirer sur le câble d'alimentationkill -9
ne devrait pas avoir d'effet indésirable, comme empêcher le redémarrage correct de l'application ou du système d'exploitation, mais de la merde se produit et l'utilisation des méthodes recommandées (kill [-15]
) ou l'arrêt régulier aideront à éviter le désordre qui pourrait se produire si vous interrompez régulièrement les programmes et les systèmes d'exploitation de cette façon. Dans tous les cas, il existe toujours un risque de perte de données, quelle que soit la robustesse du code.J'utilise kill -9 de la même manière que je jette les ustensiles de cuisine au lave-vaisselle: si un ustensile de cuisine est endommagé par le lave-vaisselle, alors je ne le veux pas.
Il en va de même pour la plupart des programmes (même des bases de données): si je ne peux pas les tuer sans que les choses se détériorent, je ne veux pas vraiment les utiliser. (Et si vous utilisez une de ces non-bases de données qui vous encourage à prétendre avoir conservé des données quand elles ne l’ont pas fait: eh bien, il est temps que vous réfléchissiez à ce que vous faites).
Parce que dans le monde réel, les choses peuvent tomber à tout moment pour n'importe quelle raison.
Les gens devraient écrire des logiciels tolérants aux plantages. En particulier sur les serveurs. Vous devriez apprendre à concevoir un logiciel qui suppose que les choses vont se casser, se bloquer, etc.
Il en va de même pour les logiciels de bureau. Lorsque je veux fermer mon navigateur, il faut généralement AGES pour l'éteindre. Il n'y a rien mon navigateur doit faire cela devrait prendre plus au maximum quelques secondes. Quand je lui demande de fermer, il devrait pouvoir le faire immédiatement. Quand ce n'est pas le cas, alors nous retirons kill -9 et le fabriquons.
la source
Non mentionné dans toutes les autres réponses est un cas où
kill -9
ne fonctionne pas du tout, lorsqu'un processus est<defunct>
et ne peut pas être tué:Comment puis-je tuer un processus <defunct> dont le parent est init?
Qu'est-ce qui est défunt pour un processus et pourquoi il n'est pas tué?
Donc, avant de tenter
kill -9
un<defunct>
processus, lancez-vousps -ef
pour voir quel est son parent et essayez le-15
(TERM) ou-2
(INT) et enfin-9
(KILL) sur son parent.Note: qu'est
ps -ef
- ce que .Modifier plus tard et la prudence: Faire preuve de prudence en tuant les processus, leurs parents ou leurs enfants, car ils peuvent laisser des fichiers ouverts ou corrompus, les connexions inachevées, peuvent bases de données corrompues etc sauf si vous savez ce que le
kill -9
fait pour un processus, utiliser seulement en dernier recours , et si vous devez exécuter kill, utilisez les signaux spécifiés ci-dessus avant d'utiliser-9 (KILL)
la source
Ne jamais faire un
kill -9 1
. Évitez également de tuer certains processus tels que mount`. Lorsque je dois tuer beaucoup de processus (par exemple, une session X doit être suspendue et je dois tuer tous les processus d'un utilisateur donné), j'inverse l'ordre des processus. Par exemple:Gardez à l'esprit que cela
kill
n'arrête pas un processus et libère ses ressources. Il ne fait qu’envoyer un signal SIGKILL au processus; vous pourriez vous retrouver avec un processus qui est bloqué.la source
kill -9 1
est simplement ignoré sous la plupart des unices. Il n'y a aucun besoin d'éviterkill -9
pourmount
, mais aucun point dedans non plus. Je ne sais pas ce que vous entendez par «inverser l'ordre des processus».kill -9
arrête (en tant que tuer) un processus sans lui donner une chance de se plaindre; toutefois, le meurtre ne se produira pas immédiatement si le processus se déroule dans un appel système non interruptible . Tuer un processus aveckill -9
libère la plupart des ressources, mais pas toutes .Tuer des processus bon gré mal gré n'est pas une mince affaire: des données peuvent être perdues, des applications mal conçues peuvent se casser de manière subtile qui ne peuvent pas être réparées sans une réinstallation ... mais cela dépend complètement de savoir ce qui est protégé ou non. situation donnée. et ce qui serait à risque. L’utilisateur devrait avoir une idée du processus qu’il est ou devrait être en train de faire et de ses contraintes (disque IOPS, rss / swap) et pouvoir estimer le temps qu’un processus long devrait prendre (par exemple une copie de fichier, réencodage mp3, migration de messagerie, sauvegarde, [votre temps préféré ici].)
De plus, envoyer
SIGKILL
à un pid n'est pas une garantie de le tuer. S'il est bloqué dans un appel système ou déjà zombié (Z
dansps
), il peut continuer à l'être. C’est souvent le cas d’un processus de longue haleine et de l’oublibg
avant d’essayerkill -9
. Un simplefg
va reconnecter stdin / stdout et probablement débloquer le processus, généralement suivi de la fin du processus. S'il est bloqué ailleurs ou dans une autre forme de blocage du noyau, seul un redémarrage peut permettre de supprimer le processus. (Les processus Zombie sont déjà morts après avoirSIGKILL
été traités par le noyau (aucun autre code utilisateur ne sera exécuté), il existe généralement une raison pour le noyau (similaire au fait d'être "bloquée" en attente d'un appel système) pour que le processus ne se termine pas.)De même, si vous souhaitez supprimer un processus et tous ses enfants, prenez l'habitude d'appeler
kill
avec le PID annulé, pas seulement le PID lui-même . Il n'y a aucune garantieSIGHUP
,SIGPIPE
ni aucunSIGINT
autre signal nettoyant après, et avoir un tas de processus de nettoyage désavoués pour nettoyer (vous souvenez-vous d'un bâtard?) Est ennuyeux.Bonus maléfique:
kill -9 -1
est légèrement plus dommageable quekill -9 1
(Ne faites pas non plus en tant que root, sauf si vous voulez voir ce qui se passe sur une VM jetable et non importante)la source
Pourquoi vous ne voulez pas
kill -9
un processus normalementSelon
man 7 signal
:Cela signifie que l’application qui reçoit l’un ou l’autre de ces signaux ne peut pas les "intercepter" pour qu’elle ait un comportement de fermeture.
Ce que vous devez faire avant de lancer
kill -9
un processusAvant d'envoyer le signal au processus, vous devez vous assurer que:
kill -9
processus entraînera essentiellement la perte de ces données.la source
J'ai créé un script qui aide à automatiser ce problème.
Il est basé sur ma réponse complète 2 dans une question très similaire à stackoverflow .
Vous pouvez lire toutes les explications ici. Pour résumer, je recommanderais juste
SIGTERM
etSIGKILL
, ou mêmeSIGTERM
,SIGINT
etSIGKILL
. Cependant, je donne plus d'options dans la réponse complète.S'il vous plaît, n'hésitez pas à télécharger (cloner) à partir du référentiel github pour tuer gracieusement 1
la source