Y a-t-il une différence entre
kill -9 212121
et
kill 212121
Y a-t-il une différence entre
kill -9 212121
et
kill 212121
Réponses:
La page de manuel Ubuntu pour kill
expliquer le but du -9
commutateur (certes de façon plutôt saccadée):
Name Num Action Description
KILL 9 exit cannot be blocked
Voici ce qu'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é, leTERM
signal est envoyé. LeTERM
signal 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 -9
commutateur garantit que le processus est efficacement tué. Même si un processus figé ou ne répondant pas peut ne pas répondre à un simple TERM
signal, il mourra dès l'envoi d'un KILL
signal.
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 bon résumé des signaux informatiques.
Les signaux que vous kill
pouvez envoyer sont listé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
est 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 des signaux, SIGKILL est l’un des rares systèmes uniques gérés par le système d’exploitation, et non par 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 qu'il 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 tracées 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 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 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
, SIGPIPE sera envoyé au cat
processus après l’impression de la première ligne, entraînant la cat
fin de celle-ci avant la fin de la totalité du fichier.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ê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 envoyez SIGHUP , le processus supposera que la connexion est morte et effectuera son nettoyage standard.
SIGQUIT
, où l'action par défaut consiste à vider le noyau et à se terminer. Cela peut être utilisé si un programme fait quelque chose de très mal, vous devez l'arrêter immédiatement et vous souhaitez pouvoir le déboguer plus tard.
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: signal SIGTERM , qui peut être manipulé par les programmeurs
kill -9