En cas de processus récalcitrant, il est possible d’utiliser le signal 9 SIGTERM, ce dernier ne se souciera pas de des processus enfants existants et pourra engendrer des processus zombies (qui pourront toujours par la suite être tués) :
# kill -9 <PID> # kill -SIGKILL <PID>
Raccourcis clavier
Les processus peuvent être suspendus avec des commande clavier :
suspendre : Ctrl+z
supprimer : Ctrl+c
vider : Ctrl+\
Tuer des processus en arrière plan
La commande kill permet de tuer un processus en arrière-plan.
Pour une frappe plus chirurgicale, on peut déterminer sur quelle session les processus sont problématiques avec la commande w (Show who is logged on and what they are doing).
# w -u john USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT john tty2 13:37 8:12 0.01s 0.01s -bash john tty4 13:37 8:12 0.14s 0.14s -bash john tty5 13:37 8:12 0.42s 0.42s -sleep
Tuer les processus de la session, si cela ne fonctionne pas, on peut specifier le signal 9 SIGKILL :
# pkill -t tty5 # pkill -SIGKILL -t tty5
Arboressence des processus
La commande ptree permet d’afficher un arbre des processus et déterminer leurs relations parents/enfants :
# pstree -p john bash(1337)─┬─sleep(1338) ├─sleep(1339) ├─sleep(1340) └─sleep(1341)
Pour tuer les processus ENFANTS on utilise l’option -P (pour PID du PARENT) de pkill :
# pkill -P 1337
Avec un SIGKILL si nécessaire :
# pkill -SIGKILL -P 1337
Et les ENFANTS du processus disparaitront.
Tuer les tous avec killall
La commande killall permet de tuer tous les processus en fonction de leurs noms
# killall <process> # killall -u <user> <process>
Exemple :
# killall php-cgi # killall -u john php-cgi
/!\ Résumé des commandes
Commandes :
# ps aux | grep <pattern> // lister les processus
# kill -l // lister les signaux de kill # kill <PID> // tuer un processus
# pgrep // lister les processus en fonction de critères # pgrep -l -u john // lister tous les processus de l'utilisateur john # pstree -p john // lister tous les processus parents/enfants
# pkill // tuer des processus en masse # pkill -P <PID_parent> // tuer UNIQUEMENT LES ENFANTS # pkill -9 -P <PID_parent> // tuer UNIQUEMENT LES ENFANTS brutalement # pkill -9 -u john // tuer tous les processus de john
# w -u john // QUI fait QUOI et OÙ # pkill -t tty5 // Tuer tous les processus d'une session # pkill -SIGKILL -t tty5 // Idem mais de façon brutale
# jobs // affiche les processus en arrìere-plan # kill -SIGTERM %<JOB_NUM> // tuer les processus en arrière-plan
# <command> & // lance une commande en background # bg <command> // lance une commande en background # fg <command> // lance une commande en foreground
# ulimit // limit the use of system-wide resources
Notes
Les aplications sans ``tty`` sont des daemons
Cas pratique
Suppression de processus
Création d’un script contenant une boucle while :
[aline@SERVER01 ~]$ mkdir /home/aline/bin [aline@SERVER01 ~]$ chmod +x /home/aline/bin/occurence.sh [aline@SERVER01 ~]$ vim /home/aline/bin/occurence.sh #!/bin/bash while true; do echo -n "$@ " >> ~/occurence.sh_output.txt sleep 5 done
Lancement de 3 ‘occurence.sh’ en arrière plan (&) du script en passant des arguments :
[aline@SERVER01 bin]$ occurence.sh Blue & [1] 3460
[aline@SERVER01 ~]$ touch /home/aline/bin/BoucleSleep.sh [aline@SERVER01 ~]$ chmod +x /home/aline/bin/BoucleSleep.sh [aline@SERVER01 ~]$ vim /home/aline/bin/BoucleSleep.sh #!/bin/bash while true; do var=1 while [[ var -lt 60000 ]]; do var=$(($var+1)) done sleep 1 done