web-dev-qa-db-fra.com

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
48
user784637

La page de manuel Ubuntu pour killexplique l’objet du commutateur -9 (certes de manière plutôt saccadée):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

Voici ce que ne autre page de manuel dit.

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


Par conséquent, l'utilisation du commutateur -9 garantit que le processus est effectivement tué. Même si un processus bloqué ou ne répondant pas peut ne pas répondre à un simple signal TERMname__, il mourra s'il reçoit un signal KILLname__.

27
SirCharlo

La commande kill enverra un signal défini à un processus ayant une identité donnée (PID). :

kill -<signal> <pid>

Bien sûr, nous ne pouvons tuer que les processus que nous possédons, alors que root peut tuer tous les processus. Voir Wikipedia pour un résumé de Nice 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 n'est donné, 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 correspond à la manière dont une application peut agir sur le signal:

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

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

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

Il convient de noter que, dans le monde de la gestion du signal, SIGKILL est l’un des rares systèmes uniques gérés par le système d’exploitation pas le programme. Lorsque vous exécutez kill -9, vous ne dites pas à l'application de se terminer, mais au système d'exploitation de cesser d'exécuter le programme, peu importe ce que le programme fait.

Après l'envoi de SIGKILL, 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 continuer ou non jusqu'à la fin, en fonction de l'appel, mais le programme lui-même ne s'exécutera plus. Notez que les tâches suivies ou 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 bloque 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 il le souhaite, ou s'il ignore le signal, un comportement par défaut est appliqué.

Voici quelques signaux utiles que vous pourriez vous retrouver en train d'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).
    Arrête normalement le programme.
  • SIGINT - interrompre
    Envoyé quand vous frappez CTRL+C
    Signifie généralement "arrêtez ce que vous faites" - peut tuer ou non le programme
  • SIGTERM - se termine
    La valeur par défaut envoyée par kill et killall.
    Termine habituellement le programme ... parfois après que le programme a terminé quoi que ce soit qu'il fasse.
  • SIGSTOP - stop
    Envoyé quand vous frappez 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 processus cat après l’impression de la première ligne, causant ainsi la fermeture de cat avant de terminer le fichier entier.

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

Par exemple, si vous souhaitez mettre fin à la session SSH de quelqu'un, vous pouvez simplement arrêter le processus, mais ce faisant, vous l'empêchez 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.

15
tylerl

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

Utilisations: SIGKILL singal

Kill Signification: La commande kill sans signal passe le signal 15, qui termine le processus normalement.

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

6
devav2