Pourquoi ne devrais-je pas utiliser 'kill -9' / SIGKILL

14

Publier cette question parce que j'ai été surpris de ne pas trouver de réponse directe; excuses s'il s'agit d'un doublon - j'ai regardé!

J'ai entendu cela kill -9ou kill -SIGKILLc'est mauvais, mais je ne comprends pas pourquoi. Si je ne devrais pas, kill -9que dois- je faire pour tuer un processus?

dimo414
la source
2
La prémisse de la question est fausse. SIGKILL n'est qu'un outil. Il est recommandé dans certaines situations et non recommandé dans d'autres situations (comme tous les autres outils).
kubanczyk
@kubanczyk bien sûr, mais c'est un outil souvent mal appliqué et utilisé sans comprendre son objectif. J'ai vu de nombreuses discussions où A dit " Just kill -9it ", OP dit " super, ça a fonctionné! Je m'en souviendrai à partir de maintenant! ", Et B intervient pour avertir "l' attente kill -9est dangereuse! " Seulement après coup.
dimo414

Réponses:

15

SIGKILLretire le tapis de votre processus de course, le terminant immédiatement. Pour les programmes très simples, c'est très bien; dans la pratique cependant, il existe très peu de programmes "simples".

Sous les couvertures, même les programmes d'apparence triviale font toutes sortes de travaux transactionnels dont ils ont besoin pour nettoyer avant de se terminer (pensez au finallybloc en Java et dans d'autres langages de programmation), tels que la fermeture des poignées de ressources, la suppression de fichiers temporaires et le vidage des données de mémoire sur disque. Vous ne pouvez pas prévoir quand un programme pourrait faire quelque chose comme ça.

Si vous êtes chanceux, vous ne remarquerez rien de mal si vous envoyez un SIGKILL, mais vous ne pouvez pas être chanceux pour toujours, et vous ne saurez peut-être rien qui ne va pas tant qu'il n'est pas trop tard pour récupérer ce qui a été perdu.

Vous ne devriez presque jamais avoir besoin d'envoyer un SIGKILL, et vous devez être sûr d'avoir épuisé vos alternatives avant de le faire. Dans de nombreux cas, le redémarrage (qui finira par envoyer des SIGKILLprogrammes malveillants) est plus sûr que l'envoi manuel d'un SIGKILLvous - même. Je peux probablement compter sur une main le nombre de fois où j'ai eu besoin d'envoyer un SIGKILL(et probablement tous de ma propre fabrication).

De manière générale, vous pouvez utiliser Ctrl+ C(qui envoie le processus de premier plan a SIGINT) ou SIGTERM(comme dans "terminer") pour demander à un processus d'arrêter ce qu'il fait et de quitter.

Quelques lectures supplémentaires:

dimo414
la source