Pour tuer tous les processus d’un utilisateur:
pkill -u login
Un processus zombie est un processus qui a été lancé par un processus parent et qui s’est terminé sans que le processus père ne soit mis au courant.
Le système a donc vidé la mémoire et les ressources utilisées par le processus zombie.
La table des processus garde cependant une trace de celui-ci, (attendant simplement le moment où le processus parent demandera au système d’exploitation l’état de son processus fils) cela crée un processus zombie.
Trop de processus zombies provoque un gaspillage énorme de ressources et peut aussi amener à ne plus pouvoir lancer de nouveaux programmes si le nombre de processus max est atteint au sein du système.
Vous pouvez identifier le nombre maximal de processus:
cat /proc/sys/kernel/pid_max
32768
Généralement, c’est la valeur 32768 qui apparaît.
Pour éviter ce genre de situation, tout processus bien écrit ne devrait pas créer de zombie et par extension, il n’est donc pas normal d’en trouver.
Pour supprimer un zombie, vous devez tuer le processus père.
Attention tout de même, le fait de tuer un processus parent peut rendre votre système instable et vous obliger à redémarrer.
Pour vérifier l’état des processus, on va utiliser la commande ps:
ps aux | grep Z
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
starmate 7294 0.0 0.0 0 0 pts/9 Z 20:47 0:00 [08_zombie]
starmate 7282 0.0 0.0 11812 2316 pts/9 S+ 20:48 0:00 grep --colour=auto Z
La colonne STAT (en gras) affiche un Z si le processus est dans l’état zombie.
C’est le cas du processus qui a le PID 7294.
Pour connaître le processus père, il suffit d’utiliser la commande pstree:
pstree -p -s 7294
init(1)───mdm(1354)───mdm(1381)───init(2525)───entropia(3509)───bash(3682)───08_zombie(7293)───08_zombie(7294)
On peut voir que le processus père est le programme 08_zombie dont le PID est 7293.
Pour tuer ce programme, on utilise la commande kill:
kill -9 7293
Bravo, vous avez tué votre premier zombie.
Lsof (List Open file) est une commande Unix/Linux qui permet de lister les fichiers actuellement ouverts sur le système.
Utilisation de commande lsof :
lsof /chemin/d'un/fichier (pour voir qui ou quoi ouvre actuellement le fichier)
lsof +D /chemin/répertoire/ (pour voir qui ou quoi ouvre actuellement les fichiers d'un répertoire )
lsof -i (tous services internet TCP/UDP)
lsof -i tcp (tous services TCP)
lsof -i udp (tous services UDP)
lsof -i tcp:80 (services TCP sur port 80)
lsof -i @192.168.2.10 (liaison internet de mon poste avec 192.168.2.10)
Afficher les fichiers ouverts par un processus (uid):
lsof -p 75014
Afficher les connexions internet ouvertes par un processus :
lsof -i -p 75014
Pour connaître tous les ports réseau ouvert par le processus qui a le pid 75014 (-a est interprété comme AND)
lsof -i -a -p 75014
La forme suivante de la commande permet de connaître tous les fichiers ouverts par l’utilisateur starmate:
lsof -u starmate
La même chose mais cette fois cela concerne tous les utilisateurs sauf starmate:
lsof -u ^starmate
L’option « -t » permet de retourner dans la sortie standard uniquement l’uid du/des processus ouvrant le/les fichier(s), il est simple par la suite de l’exploiter avec une petite boucle:
for i in `lsof -t -u starmate`; do kill -9 $i; done
Pour identifier les processus en cours d’exécution qui ont gardés ouvert des fichiers qui ont été supprimés:
lsof +L1
Les processus qui n’ont pas libérés les fichiers supprimés sont identifiés avec l’argument (deleted) en fin de ligne.
Un petit script pour tuer un processus qui dure trop longtemps (ici php):
#!/bin/bash
/bin/ps -eo pid,etime,command|/bin/grep /usr/local/zend/bin/php|/bin/
Tous d’abord il faut récupérer son PID, pour le test j’ai lancé une vidéo avec vlc.
Pour cela on fait un petit ps:
ps -ef | grep -i vlc | grep -v grep
starmate 1656 20540 52 22:07 ? 00:00:03 /usr/bin/vlc --started-from-file /...
On voit que le PID est 1656.
Donc maintenant pour figer le processus, on utilise le paramètre -STOP:
kill -STOP 1656
Pour le reprendre, on utilisera le paramètre –CONT:
kill -CONT 1656