[MERCI RESOLU] shell sh....AWK grace au melange d'idees

shell sh....AWK grace au melange d'idees [MERCI RESOLU] - Shell/Batch - Programmation

Marsh Posté le 04-08-2002 à 00:57:02    

Bonjour  
 
j'ai un souci, je voudrai pouvoir ecrire un script Shell sh qui tuerai des processus lances...
 
tels que par exemple
PID PPID
1    
2    1
3    2
4    3
5
6    5
7    6
8
9
10   9
 
et ne tuer que les 5 6 & 7 par exemple selon la commande
 
je penssais recuperer ca par
ps -ef | grep commande
PID PPID
5          commande
6    5     souscommande
7    6     truc
11         ps -ef | grep command
 
TO_kill=`ps -ef |grep $1`
kill $TO_kill
 
mais voila comment faire ca proprement et surtout sans couper un process innocent qui n'a rien a voir...


Message édité par kuroineko le 04-08-2002 à 23:27:15

---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 04-08-2002 à 00:57:02   

Reply

Marsh Posté le 04-08-2002 à 14:02:39    

kuroineko a écrit a écrit :

Bonjour  
j'ai un souci, je voudrai pouvoir ecrire un script Shell sh qui tuerai des processus lances...
et ne tuer que les 5 6 & 7 par exemple selon la commande




 
Il y a plein de façons (à modifier suivant la tronche de la sortie de ta commande ps)
 

Code :
  1. ps -U $USER |grep $commande|cut -c1-6|xargs kill -9


 
Ou encore :

Code :
  1. ps -U $USER -o pid,args |awk "/${commande}/ {print $\1}"|xargs kill -9


 
Bref, avec un peu d'imagination on trouve 2 milliards de façons.
 
 
oops, je réponds pas du tout à la question :)


Message édité par JyB le 04-08-2002 à 14:17:26
Reply

Marsh Posté le 04-08-2002 à 15:27:37    

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 :
  1. ./plop.sh commande|xargs kill -9


pour les buter tous.
 

Code :
  1. #! /bin/sh
  2. PIDS=`ps -ax -o pid,args|grep "^ *[0-9]* $1 \$"|cut -c1-6`
  3. doit () {
  4.     ps -ax -o pid=,ppid=|awk "BEGIN {n=0;i=1;t[0]=$1;}
  5. END {
  6.     do {
  7. oi=i;
  8. for (m in pid)
  9.     for (j in t)
  10.  if (t[j] == ppid[m]) {
  11.      t[i++]=pid[m];
  12.      delete pid[m] ;
  13.      delete ppid[m] ;
  14.      break ;
  15.  }
  16.     } while (oi!=i) ;
  17.     for (j in t)
  18. printf (\"%d\n\", t[j]);
  19. }
  20. {
  21.     pid[n]=\$1;
  22.     ppid[n++]=\$2;
  23. }
  24. "
  25. }
  26. 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
Reply

Marsh Posté le 04-08-2002 à 19:06:25    

Merci je crois que j'ai compris et devrai maintenant pouvoir utiliser ton idee.
 


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 04-08-2002 à 21:37:47    

kuroineko a écrit a écrit :

Merci je crois que j'ai compris et devrai maintenant pouvoir utiliser ton idee.
 
 




listproc=`ps -ef | grep aol | awk '{print $2}'`
kill `echo $listproc | awk '{print $1 $2 $3 $4 $5 $6 $7 $8 $9 \
}'`
.... # script initial
 
et ca ca marcherai ?? [:sandblast]  

Reply

Marsh Posté le 04-08-2002 à 22:25:13    

par exemple ca : ?
 
.....#debut de script
for TOdo_kill in `ps -axu | grep aol | awk '{print $2 }'`
do
 kill -9 $TOdo_kill  
done
# script de demarrage
pengaol -Connect $AOLUSERNAME & >> \
     /var/log/aol.log 2>&1
 
------------------------------------------
 
comme aol coupe grossomodo toutes les 23~24heures, il me suffirait alors de mettre le script dans le crontab pour le tuer/redemarrer toutes les 12 heures ?:
0 8,20 * * * /home/operator/aol.sh
 
------------------------------------------
 
 [:yamusha]  
ca devrait fonctionner non ?
ensuite il me suffirait de configurer sshd, et trouver un soft qui gere le dns/ip-dynamique pour pouvoir me connecter de l'exterieur avec le compte userstd...userstd est un user du groupe std qui a tres peu de droits sur la machine.
 
ou c'est une mauvaise idee ?


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed