On Tuesday 26 September 2006 21:08, Nicolas Tripon wrote:
> set -m
> (
> (sleep 5 ; kill 0) & # timeout
>
> sleep 10 # programme
> kill 0
> )
> set +m
>
> Le problème avec les solutions qui prennent le pid d'un processus pour
> le tuer après un certain temps, c'est que le processus pourrait avoir
> disparu bien avant ; ce qui n'est pas grave si un autre processus du
> même pid n'a été crée entre temps. On pourrait dire : 'la probabilité
> est faible pour que ce soit le cas'. Oui, mais pas nulle. Dans la
> solution plus haut, on envoit un signal au groupe de processus du
> sous-shell entre '(' et ')' ; comme le signal est envoyé depuis
> l'intérieur, ce groupe n'est jamais vide : on ne peut pas viser un
> processus étranger.
Nicolas, merci pour cette solution (et l'explication) : ça marche nickel !
Juste un petit truc : quelle que soit l'issue (fin normale ou timeout),
j'ai le message suivant qui s'affiche sur la sortie d'erreur :
./ws2300-timeout.sh: line 14: 5075 Terminated ( ( sleep
$TIMEOUT; kill 0 ) & /usr/local/bin/fetch2300; kill 0 )
Or, comme ce script est exécuté dans un cron, je me retrouve avec un
message d'erreur envoyé à root. Et je ne peux pas non plus tout rediriger
stderr vers /dev/null, car sinon je n'aurai plus les vraies erreurs des
scripts appelés.
Une idée comment le supprimer ?
--
Frédéric
http://www.gbiloba.org