74 votes

Quel est le but de l'option -9 dans la commande kill ?

Y a-t-il une différence entre

kill -9 212121

et

kill 212121

51voto

Takkat Points 135194

Le site tuer enverra un message défini signal à un processus avec une identité donnée (PID) :

kill -<signal> <pid>

Bien sûr, nous ne pouvons tuer que les processus qui nous appartiennent, alors que root peut tuer tous les processus. Voir Wikipedia pour un bon résumé des signaux informatiques.

Signaux kill peuvent envoyer sont énumérés dans le page d'accueil . Le signal peut être représenté par un nom ou par un numéro. Si aucun signal n'est donné, le signal par défaut est 15 resp. TERM est utilisé.

Les trois commandes ci-dessous sont donc identiques :

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

La différence entre SIGTERM et SIGKILL est la façon dont une application peut agir sur le signal :

  • TERM : une application sera capable de se terminer, c'est-à-dire d'exécuter correctement une routine d'arrêt.
  • KILL : les applications sont arrêtées et tuées immédiatement (ce qui pourrait entraîner une perte de données ou déclencher un appel pour signaler un crash présumé dans certains cas).

37voto

SirCharlo Points 37508

La page de manuel Ubuntu pour kill explique l'objectif de la -9 (il est vrai de manière assez hachée) :

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

Voici ce que une autre page de manuel dit.

La commande kill envoie le signal spécifié au processus ou au groupe de processus spécifié. Si aucun signal n'est spécifié, la commande TERM est envoyé. Le site TERM tuera les processus qui ne reçoivent pas ce signal. Pour les autres processus, il peut être nécessaire d'utiliser la fonction KILL ( 9 ), puisque ce signal ne peut pas être attrapé.


Par conséquent, en utilisant le -9 permet de s'assurer que le processus est effectivement tué. Même si un processus gelé ou ne répondant pas peut ne pas répondre à un simple bouton TERM  il mourra lorsqu'il recevra un signal KILL signal.

24voto

MKL Points 161

Notez que tous les termes suivants sont synonymes :

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

Il est utile de souligner que dans le monde du traitement des signaux, SIGKILL est l'une des rares à être gérée par l'unité de gestion de l'environnement. système d'exploitation pas le programme. Lorsque vous exécutez kill -9 En effet, vous ne demandez pas à l'application de se terminer elle-même, mais vous demandez au système d'exploitation d'arrêter d'exécuter le programme, quoi qu'il fasse.

Après SIGKILL est envoyé, le programme sera immédiatement arrêté. Si des appels du noyau sont en cours d'exécution (par exemple File IO) au nom du programme, ces appels peuvent ou non continuer jusqu'à leur fin, selon l'appel, mais le programme lui-même ne s'exécutera plus. Notez que tracé ou les tâches exécutées sous un débogueur peuvent se comporter différemment ici.

L'autre signal qui ne peut pas être bloqué est SIGSTOP qui a un effet similaire, mais au lieu de gèle le programme ; vous pouvez envoyer SIGCONT plus tard pour le reprendre. Ce comportement est entièrement contrôlé par le système d'exploitation, et le programme ne reçoit aucune notification préalable.

Tous les autres signaux sont envoyés au programme ; il peut les traiter comme il l'entend, ou s'il ignore le signal, un comportement par défaut est suivi.

Voici quelques signaux utiles que vous pouvez être amené à envoyer à un processus :

  • SIGHUP -- raccrocher
    Indique au programme que l'utilisateur s'est déconnecté (par exemple, la session SSH ou la fenêtre du terminal a été fermée).
    Effectue généralement un arrêt en douceur du programme.
  • SIGINT -- interruption
    Envoyé quand vous avez frappé CTRL + C
    Signifie généralement "arrêtez ce que vous êtes en train de faire" -- peut ou non tuer le programme.
  • SIGTERM -- résilier
    Le défaut envoyé par kill et killall .
    Termine généralement le programme... parfois après que le programme ait terminé ce qu'il était en train de faire.
  • SIGSTOP -- arrêter
    Envoyé quand vous avez frappé CTRL + Z
    Met le programme en pause, comme indiqué ci-dessus
  • SIGPIPE -- tuyau fermé
    Indique au programme que le pipeline a été fermé. Termine généralement le programme.
    Par exemple cat /etc/passwd | head -n1 enverra SIGPIPE au cat après l'impression de la première ligne, ce qui provoque cat pour terminer avant de terminer le fichier entier.

Bien que tous ces signaux se produisent "naturellement" dans leur propre cadre, vous pouvez utiliser le signal pour simuler une condition afin d'obtenir le résultat souhaité.

Par exemple, si vous voulez mettre fin à la session SSH de quelqu'un, vous pouvez simplement tuer le processus, mais en faisant cela, vous l'empêcherez de mettre à jour son fichier HISTORY, ce qui peut être important pour des raisons de sécurité. Mais à la place, si vous lui envoyez SIGHUP alors le processus supposera que la connexion est morte et effectuera son nettoyage standard.

6voto

devav2 Points 33862

tuer -9 Signification : Le processus sera tué par le noyau ; ce signal ne peut être ignoré. 9 signifie un signal KILL qui n'est pas capturable ou ignorable.

Utilisations : SIGKILL singal

Tuer Signification : La commande kill sans aucun signal passe le signal 15, qui termine le processus de façon normale.

Utilisations : SIGTERM signal, qui peut être géré par les programmeurs

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X