6 exemples d’utilisation de la commande Kill sur Linux

Kill est une commande Linux qui permet d'envoyer un signal à un processus pour le contrôler.
On peut arrêter, tuer un processus mais aussi le suspendre pour le reprendre.
Ainsi Kill permet d'effectuer toutes sortes d'opérations sur les processus Linux.

Dans ce tutoriel, je vous montre plusieurs exemples d'utilisation de la commande Kill.

6 exemples d'utilisation de la commande Kill sur Linux

5 exemples d'utilisations de la commande Kill sur Linux

Pour le fonctionnement général des processus sur Linux, suivez ce tutoriel :

Tuer un processus avec kill sur Linux

Tout d'abord, on récupère le PID (numéro identifiant) du processus.
Par exemple avec pgrep :

pgrep <nom du processus>

Par exemple pour récupérer le PID du processus vim :

pgrep vim

Puis pour arrêter un processus en laissant le processus de nettoyage se faire par le signal TERM :

kill <pid processus>

Par exemple pour demander l'arrêter du processus avec le PID 562 :

kill 562

Pour tuer un processus de manière plus brutal, lorsque la demande d'arrêt ne fonctionne pas, on envoie un signal KILL (9).
Le processus va s'arrêter instantanément sans suivre le processus de nettoyage :

kill -9 <pid processus>
kill -9 562

Pour aller plus vite, vous pouvez utiliser la commande suivante :

kill -9 `pgrep <nom processus>`

Par exemple pour tuer le processus vim :

kill -9 `pgrep vim`
Comment tuer un processus avec Kill

Fermer une session en ligne de commande avec Kill et tuer tous les processus d'un utilisateur

Pour cela, il faut identifier le processus bash, dash utilisé par le terminal utilisateur.
Ensuite on arrête le processus avec kill pour fermer la session utilisateur.

Lister les sessions utilisateurs ouvertes avec la commande :

w

Dans cet exemple, nous avons deux terminaux (TTY), pts/0 et pts/1

Lister les sessions ouvertes

Pour récupérer le PID des sessions ouvertes :

ps -ft pts/0
ps -ft pts/1

Puis identifiez la ligne bash, dash selon le type de shell avec son PID (ici 600 ou 610).

Fermer une session en ligne de commande avec Kill et tuer tous les processus d'un utilisateur

Enfin on utilise la commande kill avec le numéro du PID pour fermer la session.

kill 610

Plus de détails :

Comment lister les noms et numéros des signaux

Pour afficher la liste des noms et numéros des signaux, on utilise l'option -L :

[email protected]:~$ kill -L
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Voici un récapitulatif issu de Wikipedia :

IDNomDescription
1SIGHUPRupture détectée sur le terminal contrôleur ou mort du processus parent
2SIGINTInterruption du clavier (Ctrl+C dans un terminal)
3SIGQUITArrêt du processus
4SIGILLInstruction illégale
6SIGABRTArrêt anormal du processus
8SIGFPEErreur sur un nombre flottant
9SIGKILLTue immédiatement le processus
11SIGSEGVErreur de segmentation
13SIGPIPEErreur de tube (écriture dans un tube sans lecteur)
14SIGALRMSignal du timer définit par alarm(2)
15SIGTERMTermine le processus
16, 10, 30SIGUSR1Signaux utilisateurs, l'action est spécifique au processus
18, 20, 17SIGCHLDProcessus enfant terminé ou stoppé
19, 18, 25SIGSTOPInterromps immédiatement le processus
20, 18, 24SIGSTPInterromps le processus (Ctrl+Z dans un terminal)
21, 26SIGTTINEntrée de terminal pour un processus en arrière plan
22, 27SIGTTOUSortie de terminal pour un processus en arrière plan
SIGVTALRMchronomètre virtuel (Virtual Timer) expiré
SIGXCPULe processus a dépassé une certaine limite d'utilisation du processus définit par l'utilisateur. Le processus doit alors sauvegarder les données temporairement obtenues et quitter proprement avant une interception par le signal SIGKILL.
SIGXFSZLe script a fait grossir un fichier au-delà d'une limite définie
SIGWINCHla taille du terminal contrôlant le processus a changé
Liste des signaux envoyés aux processus Linux

Envoyer un signal à un processus avec la commande kill

L'un de ces signaux donné ci-dessus peut être envoyé à un processus avec kill en utilisant le numéro ou le nom d'un signal.
Les moyens suivants sont des moyens équivalents d'envoyer un processus un signal HUP.

kill -s HUP 632
kill -s 1 632
kill -HUP 632
kill -1 632

Redémarrer un processus avec Kill

Vous pouvez utiliser Kill pour redémarrer un processus.
Par exemple, après modification d'un fichier de configuration, vous demandez au processus de se relancer afin de relire ce dernier.
Cela peut aussi permettre de fermer tous les fichiers journaux/logs pour les réouvrir.

Pour cela, on utilise kill pour envoyer le signal SIGHUP :

kill -HUP <numéro pid>

Par exemple si le PID du processus est 512 :

kill -HUP 512

Enfin on peut aussi utiliser pgrep avec le nom du processus de cette manière :

kill -HUP `pgrep vim`
Attention dans certains cas, ce signal SIGHUP peut arrêter complètement le processus.
Après utilisation, vérifiez bien avec la commande PS que le processus est toujours en cours d'exécution.

Suspendre et reprendre un processus avec Kill

SIGSTOP indique à un processus de «tenir» et SIGCONT raconte un processus de «ramasser là où vous l'avez laissé». Cela peut très bien fonctionner pour les emplois RSYNC, car vous pouvez suspendre le travail, effacer un peu d'espace sur le périphérique de destination, puis reprendre le travail.
Le processus Source RSYNC pense simplement que le processus de destination RSYNC prend beaucoup de temps pour répondre.

kill -SIGSTOP <numéro pid>
kill -SIGCONT <numéro pid>

Ce qui donne les commandes kill suivant, on voit bien que le processus passe de l'Etat S (Running) à T (STOP) pour revenir à S (Running) :

[email protected]:~$ ps aux|grep cron
root       496  0.0  0.0   8356  1996 ?        Ss   Jul15   0:02 /usr/sbin/cron -f
debian    1441  0.0  0.0   6144   828 pts/1    S+   10:42   0:00 grep cron
[email protected]:~$ sudo kill -SIGSTOP `pgrep cron`
[email protected]:~$ ps aux|grep cron
root       496  0.0  0.0   8356  1996 ?        Ts   Jul15   0:02 /usr/sbin/cron -f
debian    1446  0.0  0.0   6144   828 pts/1    S+   10:42   0:00 grep cron
[email protected]:~$ sudo kill -SIGCONT `pgrep cron`
[email protected]:~$ ps aux|grep cron
root       496  0.0  0.0   8356  1996 ?        Ss   Jul15   0:02 /usr/sbin/cron -f
debian    1451  0.0  0.0   6144   896 pts/1    S+   10:42   0:00 grep cron
[email protected]:~$
Kill : suspendre puis reprendre un processus