kuroineko a écrit a écrit :
Bonjour j'ai un souci, je voudrai pouvoir ecrire un script Shell sh qui tuerai des processus lances...
mais voila comment faire ca proprement et surtout sans couper un process innocent qui n'a rien a voir...
|
Bon, maintenant que j'ai compris la question
je peux répondre : il suffit de faire un parcours de l'arbre méthode gros porc
Bon, il te faudras sans doute modifier tout ça pour l'adapter au ps et au awk de ton système mais c'est l'idée (et ça fonctionne en plus !)
Pour la selection du bon process c'est pénible parce que un grep bête ne fonctionne pas à tous les coups, avec un peu de malchance le grep courant se retrouve dedans
du coup il faut faire une sélection un peu stricte
Le code suivant t'affiche la liste des pids des processus étant commande ou descendant de commande (si tu l'appelle ./plop.sh commande par exemple).
Il te suffit de faire un
Code :
- ./plop.sh commande|xargs kill -9
|
pour les buter tous.
Code :
- #! /bin/sh
- PIDS=`ps -ax -o pid,args|grep "^ *[0-9]* $1 \$"|cut -c1-6`
- doit () {
- ps -ax -o pid=,ppid=|awk "BEGIN {n=0;i=1;t[0]=$1;}
- END {
- do {
- oi=i;
- for (m in pid)
- for (j in t)
- if (t[j] == ppid[m]) {
- t[i++]=pid[m];
- delete pid[m] ;
- delete ppid[m] ;
- break ;
- }
- } while (oi!=i) ;
- for (j in t)
- printf (\"%d\n\", t[j]);
- }
- {
- pid[n]=\$1;
- ppid[n++]=\$2;
- }
- "
- }
- for p in $PIDS; do doit $p; done
|
edit: j'avais laissé un truc qui sert à rien
Message édité par JyB le 04-08-2002 à 15:45:25