GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Killall sous Linux avec des exemples

La ligne de commande Linux propose diverses commandes pour tuer un processus. Par exemple, la commande 'kill' peut être utilisée pour tuer un processus en passant son PID comme argument, la commande 'pkill' prend un motif en entrée et tous les processus en cours d'exécution correspondants sont tués. Mais il existe une commande 'killall', qui correspond exactement au nom de l'argument par défaut, et tue le processus correspondant.

Dans cet article, nous aborderons cette commande avec quelques exemples pratiques. La commande killall peut être utilisée pour envoyer un signal à un processus particulier en utilisant son nom. Cela signifie que si vous avez cinq versions du même programme en cours d'exécution, la commande killall tuera les cinq.

Le signal peut être spécifié comme argument à cette commande ou bien SIGTERM est envoyé par défaut. Un processus peut générer des processus enfants qui sont indépendants du processus parent, cela signifie que chaque sous-processus s'identifie par son pid. Avec la commande kill, on utilise le pid pour sélectionner le sous-processus à tuer mais avec la commande killall, en indiquant le nom, car tous les sous-processus et processus parent ont le même nom, tous les processus seront tués.

Discutons de l'utilisation de la commande killall à travers quelques exemples pratiques.

1) Listez tous les signaux pris en charge

La commande kill prend en charge certains signaux qui peuvent être listés avec -l option. killall envoie des signaux aux processus. Vous pouvez utiliser le -s option (suivie du nom du signal) pour envoyer un signal particulier à un processus.

$ killall -l
 HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
 STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
 UNUSED

Par défaut SIGTERM/TERM (15) est envoyé au processus, sinon le signal est donné à la commande killall. Les signaux ci-dessus sont utilement utilisés par les utilisateurs et les administrateurs système. Killall prend donc en charge tous ces signaux.

2) Tuer un processus particulier

Pour tuer un processus, nous devons l'identifier pour vérifier s'il est en cours d'exécution. Nous pouvons tuer un processus particulier par son nom. Supposons qu'il y ait deux processus qui ont les mêmes caractères initiaux :

$ ps -aef | grep "test"
 himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test
 himanshu 3970 2811 0 14:14 pts/0 00:00:00 ./test_again

Maintenant, voici comment vous pouvez utiliser la commande killall pour tuer 'test_again' :

$ killall test_again
 [2]+ Terminated ./test_again

Comme vous pouvez le voir, la commande killall a terminé le processus 'test_again'. Cela peut également être confirmé via la commande ps :

$ ps -aef | grep "test"
 himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test

Observez que 'test_again' n'est pas affiché dans la sortie car il est tué.

3) Tuer un processus en ignorant la casse

La commande killall est sensible à la casse par défaut. Voici un exemple :

$ ps -aef | grep "test"
 himanshu 4177 3161 0 14:54 pts/3 00:00:00 ./test
 himanshu 4178 3161 0 14:54 pts/3 00:00:00 ./test_again
 himanshu 4180 3161 0 14:54 pts/3 00:00:00 grep --color=auto test

vous pouvez voir que tous nos processus sont en minuscules. essayons de tuer le processus "./test" mais nous entrons le nom en majuscule

$ killall TEST
 TEST: no process found

Vous pouvez donc voir que la commande killall n'a trouvé aucun processus nommé TEST, alors qu'un processus nommé 'test' est déjà en cours d'exécution. Pour vous assurer que la commande killall ignore la casse, utilisez le -I option. Voici un exemple :

$ killall -I TEST
 [1]- Terminated ./test

Observez qu'il a maintenant terminé avec succès le processus de "test".

4) Arrêter les processus avec confirmation

La commande killall peut être utilisée pour tuer plus que le processus.

$ killall test test_again
 [2]- Terminated ./test_again
 [3]+ Terminated ./test

Mais, il peut arriver de se tromper lors de l'insertion du nom du processus en indiquant un autre nom. Cela peut être un problème sérieux si le processus indiqué est un processus critique pour le système. Il est donc recommandé d'utiliser killall pour terminer les processus de manière interactive en demandant une confirmation. Pour ce faire, vous pouvez utiliser le -i option.

$ killall -i test test_again
 Kill test(4201) ? (y/N) y
 Kill test_again(4202) ? (y/N) y
 [1]- Terminated ./test
 [2]+ Terminated ./test_again

Vous pouvez donc voir que de cette façon, l'utilisateur peut contrôler la fin des processus à l'aide de la commande killall.

5) Arrêtez le processus en silence

Parfois, lorsque killall n'est pas en mesure de trouver un processus spécifié, il se plaint de la même chose dans la sortie.

Voici un exemple :

$ killall TEST
 TEST: no process found

Mais, au cas où vous voudriez que killall effectue son travail tranquillement, vous pouvez utiliser le -q choix :

$ killall -q TEST
$

Ainsi, vous pouvez voir que lorsque -q a été utilisé, la sortie a été supprimée.

6) Un résultat étrange de la commande killall

La page de manuel de la commande killall indique que, par défaut, elle ne correspond aux noms complets que s'ils ont une longueur inférieure ou égale à 15 caractères. Ainsi, si un nom de commande contient plus de 15 caractères, le nom complet peut ne pas être disponible (c'est-à-dire qu'il est remplacé). Dans ce cas, killall tuera tout ce qui correspond dans les 15 premiers caractères.

Par exemple, supposons qu'il y ait deux processus suivants avec des noms longs :

$ ps -aef | grep "test"
 himanshu 4021 3161 0 14:27 pts/3 00:00:00 ./test_abcdefghij
 himanshu 4035 3161 0 14:27 pts/3 00:00:00 ./test_abcdefgh

Le premier processus dans la sortie ci-dessus a exactement 15 caractères de nom. Essayons de le tuer en utilisant la commande killall :

$ killall test_abcdefghij
 [1]- Terminated ./test_abcdefghij

Vous pouvez donc voir que la commande killall tue le processus avec succès.

Maintenant, selon la page de manuel, si les deux noms avaient plus de 15 caractères correspondants, killall aurait tué les processus dont le nom est suivi de -e option ou il tuera tout ce qui correspond dans les 15 premiers caractères. Voici un exemple :

$ ps -aef | grep "test"
 himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
 himanshu 4141 3161 0 14:46 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwxyz
 himanshu 4143 3161 0 14:46 pts/3 00:00:00 grep --color=auto test

Observez que les deux processus ont maintenant plus de 15 caractères correspondants dans leur nom. Maintenant, quand j'ai essayé de tuer le deuxième processus en utilisant killall :

$ killall test_abcdefghijklmnopqrstuvwxyz
 [6]+ Terminated ./test_abcdefghijklmnopqrstuvwxyz

Il n'a tué que le processus spécifié et pas aussi le deuxième processus

$ ps -aef | grep "test"
 himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
 himanshu 4146 3161 0 14:47 pts/3 00:00:00 grep --color=auto test

Je ne sais pas s'il y a quelque chose d'incorrect de mon côté, ou s'il s'agit d'un bogue dans la commande killall. J'apprécierais que vous donniez votre avis à ce sujet dans les commentaires.

BTW, voici les détails de la commande killall sur mon système :

$ killall --version
killall (PSmisc) 22.20
Copyright (C) 1993-2012 Werner Almesberger and Craig Small

PSmisc comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it under
the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.

Conclusion

À partir de Centos 7, il encourage à exécuter pkill au lieu de killall, donc par défaut, vous pourriez obtenir l'erreur '' killall:command not found "lorsque vous exécutez la commande. Si vous le souhaitez toujours, installez pkill en ajoutant le package psmisc (# yum install psmisc).

Killall est utile car nous pouvons tuer un processus par son nom même si nous ne nous souvenons pas de son pid. Il n'a pas certaines options car il est relativement simple à utiliser.

Lire aussi :

  • Comment tuer un processus à partir d'un terminal Linux
  • fkill - Outil interactif pour tuer les processus sous Linux

Linux
  1. Commande Linux wc avec exemples

  2. Commande Linux Tee avec exemples

  3. Commande principale Linux avec exemples

  4. Commande JQ sous Linux avec exemples

  5. Exemples de commandes killall sous Linux

15 Commande Linux ps avec exemples

Commande de CD Linux avec exemples

Commande Linux watch avec exemples

Commande Wait sous Linux avec des exemples

La commande Wait sous Linux expliquée avec des exemples

Commande IP Linux avec exemples