Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

36 réponses
Avatar
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

10 réponses

1 2 3 4
Avatar
Luc.Habert.00__arjf
Erik :

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



pkill '<NOM_DE_VOTRE_PROCESSUS>'
Avatar
Cumbalero
Erik a écrit :

La commande suivante peut vous aider:



man pkill aide encore plus.



A+
JF
Avatar
Erik
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...
Avatar
Kevin Denis
Le 19-08-2009, Erik a écrit :

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
Avatar
Luc.Habert.00__arjf
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.
Avatar
Cumbalero
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
Avatar
Luc.Habert.00__arjf
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.
Avatar
Erik
Bon, bah au moins, ma solution est portable et universelle ;-)
Avatar
Nicolas George
Cumbalero wrote in message <h6h0a5$dd$:
[] / #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.
Avatar
Nicolas George
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.
1 2 3 4