Astuce: comment tuer de multiples instance d' un processus / how to kill multiple instances of a crazy processus

Le
Erik
Bonjour à tous,

Situation: vous souhaitez tuer plusieurs instances d' un processus
dupliqué, par exemple un script bash, faisant plusieurs fork, qui s'
emballe. Avec un ps -a, vous vous retrouvez avec 50 processus qui
portent le meme nom et qui font des forks à tour de bras (c' est du vécu
en prog système avec un script en test qui bug :-) )

La commande suivante peut vous aider:

ps -A |grep '<NOM_DE_VOTRE_PROCESSUS> '| awk {'print $1'} |xargs kill


On peut sans problème coder un petit script bash qui prend le nom du
processus (ou le tronc commun aux instances multiples) en argument,
nommé par ex, "multikill.sh"

En espérant avoir aidé ;-)

Erik LE VACON

= E N G L I S H V E R S I O N =

Hi folks,

I assume you have already lived such a situation: you wish you could
kill many instances of a duplicated process, as example, a bash script,
with many forks inside, which becomes crazy and duplicates itself, which
duplicates itself and so on With a "ps -a", you have finally 50,
100, 1000 processus with the same name, or part of the same name, making
children as well (i assume you have already seen that while testing a
buggy script in system programming tests ;-) )

The following command may be of some help:

ps -A |grep '<process_name> '| awk {'print $1'} |xargs kill

We may code a single bash script which takes the name of the process to
kill (or the common part of the name of the father and children
processes) as an argument, named as example "multikill.sh"

Hope this will help some of you ;-)


Erik LE VACON
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Luc.Habert.00__arjf
Le #19953691
Erik :

ps -A |grep '<NOM_DE_VOTRE_PROCESSUS> '| awk {'print $1'} |xargs kill



pkill '<NOM_DE_VOTRE_PROCESSUS>'
Cumbalero
Le #19953671
Erik a écrit :

La commande suivante peut vous aider:



man pkill aide encore plus.



A+
JF
Erik
Le #19953761
Génial, je ne la connaissais pas celle là !
Comme quoi, comment faire simple quand on peut faire compliqué :-)
Disons alors que celà peut servir si "kill" n' est pas installé en
standard (ok, c' est peu probable ;-) )

Bon, je sors...
Kevin Denis
Le #19953851
Le 19-08-2009, Erik

Situation: vous souhaitez tuer plusieurs instances d' un processus
dupliqué, par exemple un script bash, faisant plusieurs fork, qui s'
emballe. Avec un ps -a, vous vous retrouvez avec 50 processus qui
portent le meme nom et qui font des forks à tour de bras (c' est du vécu
en prog système avec un script en test qui bug :-) )



killall est fait pour ça, non?
KILLALL(1) User Commands KILLALL(1)

NAME
killall - kill processes by name

Donc
killall le_processus_fou
et hop les 50 d'un coup sont morts.

Ceci dit, faire attention a ne pas l'utiliser sur d'autres systèmes Unix.
Selon l'OS, ça peut avoir un autre effet..
--
Kevin
Luc.Habert.00__arjf
Le #19953841
Kevin Denis :

Ceci dit, faire attention a ne pas l'utiliser sur d'autres systèmes Unix.
Selon l'OS, ça peut avoir un autre effet..



Ouaip, donc autant utiliser pkill qui est standard.
Cumbalero
Le #19954001
Luc Habert a écrit :
Ouaip, donc autant utiliser pkill qui est standard.




[] / #uname -svrp
AIX 3 5 powerpc

[] / #which pkill
no pkill in /usr/bin /etc /usr/sbin /usr/ucb /usr/bin/X11 /sbin
/usr/java14/jre/bin /usr/java14/bin /usr/java131/jre/bin
/usr/java131/bin /usr/local/bin

[] / #which killall
/usr/sbin/killall



Et sur Linux:
[ /]# head -1 /etc/issue
CentOS release 5.3 (Final)

[ /]# which killall
/usr/bin/killall

[ /]# grep killall /etc/init.d/*
/etc/init.d/halt:action $"Sending all processes the TERM signal..."
/sbin/killall5 -15
/etc/init.d/halt:action $"Sending all processes the KILL signal..."
/sbin/killall5 -9
/etc/init.d/ndo2db:su - nagios -c "killall -9 ndo2db-3x"
/etc/init.d/sshd: killall $prog 2>/dev/null


killall est plus ancien et par conséquent plus répandu.

Je te laisse consulter les man de ces 2 commandes pour comprendre les
différences.


A+
JF
Luc.Habert.00__arjf
Le #19954231
Cumbalero :

[] / #uname -svrp
AIX 3 5 powerpc

[] / #which pkill
no pkill in /usr/bin /etc /usr/sbin /usr/ucb /usr/bin/X11 /sbin
/usr/java14/jre/bin /usr/java14/bin /usr/java131/jre/bin
/usr/java131/bin /usr/local/bin



pkill est dans la norme single unix, il est donc standard, et AIX 3.5 ne
l'est pas.
Erik
Le #19954221
Bon, bah au moins, ma solution est portable et universelle ;-)
Nicolas George
Le #19954171
Cumbalero wrote in message
[] / #which killall
[ /]# which killall



killall est plus ancien et par conséquent plus répandu.



Remplace which par man, et tu découvriras peut-être que ces deux versions ne
font pas du tout la même chose.
Nicolas George
Le #19954161
Erik wrote in message
ps -A |grep '<NOM_DE_VOTRE_PROCESSUS> '| awk {'print $1'} |xargs kill



Outre le fait que pkill ou killall sont plus courts et plus fiables, ta
commande a plein de problèmes :

- l'espace à la fin de ton grep va faire échouer la recherche ;

- ps -A peut tronquer les noms de commandes trop longs ;

- ta commande trouve aussi les commandes où le nom cherché n'est qu'une
partie du nom.
Publicité
Poster une réponse
Anonyme