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.