OVH Cloud OVH Cloud

tuer une tache

13 réponses
Avatar
fembe
bonjour ,
je n'y connais vraiment rien aux shells mais j'aimerai faire une procedure
qui teste si un process existe puis le tuer .
Apres avoir fait ps aux|grep proc_a_tuer
comment savoir si le process existe et comment récupérer l'id ?

3 réponses

1 2
Avatar
Jacques L'helgoualc'h
Le 10-04-2006, Stephane Chazelas a écrit :
[...]
En pratique, personne ne prend la peine de contourner ce
probleme tellement il est improbable. Meme les outils standards
qui se basent sur /var/run/<whatever>.pid et pkill/killall,
supposent qu'il est impossible qu'un <pid> soit reutilisé entre
l'execution d'un ps (ou un stat("/proc/<pid>/cmdline")) et le
kill(<pid>) qui vient juste apres


Oui --- ça dépend tout de même de la méthode d'attribution des pids. Si
on tourne sur l'ensemble complet, ou si on respecte un certain délai de
recyclage, ça devrait aller.

(voir meme pour certains qu'un <pid> soit reutilisé tout court).


Heu, le nombre de pids possibles est fini, non ? Sur 32 bits ça doit
durer un moment, mais pas sur 16.
--
Jacques L'helgoualc'h

Avatar
Loïc Restoux
Le 10 avr, à 15:14, R12y papotait :
C'est à toi de faire une boucle while ou for pour gérer la chose, en
fonction du shell que tu utilise.


Ou mieux, pas de boucle du tout. Avec xargs, par exemple.


--
No fortunes found

Avatar
Harpo
fembe wrote:

bonjour ,
je n'y connais vraiment rien aux shells mais j'aimerai faire une
procedure qui teste si un process existe puis le tuer .
Apres avoir fait ps aux|grep proc_a_tuer
comment savoir si le process existe et comment récupérer l'id ?


Souvent, on écrit le pid sous /var/run/, si le process s'est terminé, un
autre peut avoir pris son numero, le problème est d'éviter les balles
perdues.
La solution plus bas semble marcher. Elle devrait pouvoir marcher sur
les systèmes qui ont /proc montée (au moins BSD et Linux), le principe
est de récupérer le pid et de voir s'il tourne avec la même ligne de
commande. Il peut donc y avoir des problèmes si plusieurs instances de
la ligne de commande tournent, bien que la probabilité de faire des
dégats soit faible.
Voici une partie d'un script qui tourne en genéral une fois par jour
chez moi

#!/bin/bash
# file /root/bin/hackez01-down, should be mode 700
# stop fake http server
pid=`cat /var/run/hackez/hackttp80.pid`
killit=0
if test -d /proc/$pid/ ; then
if test -f /proc/$pid/cmdline ; then
if grep '/usr/bin/ruby./root/bin/hackttp' /proc/$pid/cmdline;
then
killit=1
fi
fi
fi
if [ $killit == 1 ] ; then
kill -TERM $pid
fi

--
http://patrick.davalan.free.fr/

1 2