Supprimer des process avec la commande xargs
Sur un serveur en Solaris 7, suite au remplissage d’un FileSystem, des process démarraient mais ne se fermaient pas correctement car les codes d’erreurs ne doivent pas être interprêtés correctement. Au final, on se retrouve avec plus de 2000 process qui ne devraient pas être présents et une machine qui rame car le nombre de process est trop important et que toutes les ressources sont occupées.
Pour résoudre le problème on peut rebooter le serveur (méthode windows : toute machine doit être rebootée plusieurs fois par jour), ou alors supprimer les process consommateurs de ressource.
Pour supprimer un process, il faut l’identifier, avec en particulier son PID, et le supprimer avec la commande kill -9 <N° PID>. Dans mon cas, il y a plus de 2000 process à supprimer, cela va être long si l’on fait du copier/coller pour les N° de PID.
La liste des process à supprimer s’obtient avec la commande
ps -ef | grep <nom du process>
Si l’on veut une liste de process pour l’utilisateur courant
ps -ef | grep <nom du process> | grep `whoami`
Ces 2 commandes renverront un résultat contenant le nom du proprétaire
du processus sur la première colonne et le numéro de PID sur la
deuxième.
Il faut donc pouvoir renvoyer la liste des PID dans une commande
kill -9
, pour cela il faut utiliser la commande xargs de la manière
suivante :
ps -ef | grep <nom du process> | grep -v grep | grep `whoami` |cut -f3 -d" " | xargs -I {} kill -9 {}
Quelques explications :
-
ps -ef
donne la liste des processus -
|
(ou pipe) redirrige le résultat d’une commande en entrée d’une autre -
grep
<nom du processus> filtre le résultat de la commande précédente sur un chaine de caractère, ici le nom d’un processus particulier -
grep -v grep
va exclure le processus de la commande grep du résultat -
grep \
whoami`` va filtrer le résultat sur le nom de l’utilisateur courant -
cut -f3 -d" "
affichera la troisième colonne du résultat, chacune des colonnes étant séparrée par des espaces. On obtient en sortie la liste des PID des processus -
xargs -I {} kill -9 {}
supprime chacun des processus
Pour réutiliser régulièrement cette commande, il est possible de créer
un alias dans le fichier .cshrc
avec la ligne suivante :
alias killproc 'ps -ef | grep \!$ | grep `whoami` |cut -f3 -d" " | xargs -I {} kill -9 {}'
Cette utilisation de la commande xargs
a été testée et utilisée
uniquement sous SUN Solaris 7.
Certaines commandes ont des syntaxes différentes suivant les systèmes
(Linux, AIX, Solaris, …), il faut donc lire ou relire le man des
commandes pour l’adapter au système en cour.