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

41

Y a-t-il une différence entre

kill -9 212121

et

kill 212121
    
posée user784637 04.09.2012 - 20:05
la source

4 réponses

23

La page de manuel d’Ubuntu pour kill explique l’objet du commutateur -9 (certes plutôt instable):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

Voici ce que dit une autre page de manuel .

  

La commande kill envoie le signal spécifié au processus ou au groupe de processus spécifié. Si aucun signal n'est spécifié, le signal TERM est envoyé. Le signal TERM va tuer les processus qui n'attrapent pas ce signal. Pour les autres processus, il peut être nécessaire d'utiliser le signal KILL ( 9 ), car ce signal ne peut pas être détecté.

Par conséquent, l’utilisation du commutateur -9 garantit que le processus est effectivement supprimé. Même si un processus bloqué ou ne répondant pas peut ne pas répondre à un simple signal TERM , il mourra lorsqu'il sera envoyé avec un signal KILL .

    
réponse donnée SirCharlo 04.09.2012 - 20:12
la source
37

La commande kill enverra un < a href="http://en.wikipedia.org/wiki/Signal_%28computing%29"> signal à un processus avec une identité donnée (PID):

kill -<signal> <pid>

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

Les signaux que kill peut envoyer sont répertoriés dans la page de manuel . Le signal peut être représenté par nom ou par numéro. Si aucun signal ne reçoit le signal par défaut 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 manière dont une application peut agir sur le signal:

  • TERM : une application peut se terminer, c'est-à-dire exécuter correctement une routine d'arrêt.
  • KILL : les applications sont arrêtées et détruites immédiatement (ce qui peut entraîner une perte de données ou une augmentation de la capacité pour signaler un crash présumé dans certains cas).
réponse donnée Takkat 04.09.2012 - 20:32
la source
13

Notez que tous les éléments suivants sont synonymes:

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

Il convient de souligner que dans le monde de la gestion des signaux, SIGKILL est l’un des rares systèmes gérés par le système d’exploitation et non le programme. Lorsque vous exécutez kill -9 , vous ne dites pas à l'application de se terminer, mais vous indiquez au système d'exploitation de ne plus exécuter le programme, quel que soit le programme.

Après l'envoi de SIGKILL , le programme sera immédiatement arrêté. Si des appels au noyau sont en cours d'exécution (par exemple, File IO) pour le compte du programme, ces appels peuvent ou non continuer jusqu'à la fin, en fonction de l'appel, mais le programme ne s'exécutera plus. Notez que les tâches ou les tâches tracées 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 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 gérer comme bon lui semble, ou s'il ignore le signal, un comportement par défaut est suivi.

Voici quelques signaux utiles que vous pouvez vous retrouver à 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).
    Fait généralement un arrêt gracieux du programme.
  • SIGINT - interrompre
    Envoyé lorsque vous appuyez sur CTRL + C
    Habituellement, cela signifie "arrêtez ce que vous faites" - peut ou non tuer le programme
  • SIGTERM - terminer
    La valeur par défaut envoyée par kill et killall .
    Termine généralement le programme ... parfois après la fin du programme.
  • SIGSTOP - arrêter
    Envoyé lorsque vous appuyez sur CTRL + Z
    Met le programme en pause, discuté ci-dessus
  • SIGPIPE - pipe closed
    Indique au programme que le pipeline a été fermé. Termine habituellement le programme.
    Par exemple, cat /etc/passwd | head -n1 enverra SIGPIPE au processus cat après l'impression de la première ligne, ce qui entraînera la fin de cat avant la fin du fichier entier.

Bien que tous ces signaux se produisent "naturellement" dans leur propre réglage, 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 vous l'empêcherez de mettre à jour son fichier HISTORY, ce qui peut être important pour des raisons de sécurité. Mais au lieu de cela, si vous l'envoyez SIGHUP , le processus supposera que la connexion est morte et effectuera son nettoyage standard.

    
réponse donnée tylerl 05.09.2012 - 08:34
la source
6

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

Utilisations: SIGKILL singal

Tuer Signification: La commande de mise à mort sans aucun signal passe le signal 15, ce qui met fin au processus normalement.

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

    
réponse donnée devav2 04.09.2012 - 20:21
la source

Lire d'autres questions sur les étiquettes