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 ?
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
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
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
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
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.
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
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/
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
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