Y a-t-il une différence entre
kill -9 212121
et
kill 212121
La page de manuel Ubuntu pour kill
explique 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
kill
envoie le signal spécifié au processus ou au groupe de processus spécifié. Si aucun signal n'est spécifié, le signalTERM
est envoyé. Le signalTERM
va tuer les processus qui n'attrapent pas ce signal. Pour d'autres processus, il peut être nécessaire d'utiliser le signalKILL
(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 TERM
name__, il mourra s'il reçoit un signal KILL
name__.
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).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:
kill
et killall
.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.
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