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

[HS] problème d'interaction entre bash et sleep...

2 réponses
Avatar
Frédéric BOITEUX
Bonjour,

J'ai besoin d'=E9crire un script bash qui lance une commande qui peut
=EAtre longue ou m=EAme bloquante, et l'interrompre si c'est le cas au bout
d'un certain d=E9lai. Je lance donc ma commande dans un sous-shell, un
=AB=A0sleep=A0=BB dans un autre, et le premier des deux qui se termine nett=
oie
l'autre. Cela marche bien lorsque je lance mon script depuis une ligne
de commande, mais en fait, je veux r=E9cup=E9rer la sortie standard de ce
programme dans une variable bash, et l=E0, probl=E8me : le programme
s'ex=E9cute bien, mais si la commande voulue se termine rapidement et
nettoie le =AB sleep =BB, une fois mon programme termin=E9, il semble que
bash attende la dur=E9e programm=E9e du sleep avant de continuer !!

Voici une version simplifi=E9e du programme (avec une commande =AB ls =BB q=
ui
ne devrait pas trop prendre de temps, et un sleep de 10 secondes) :

#!/bin/bash

cmd=3D'ls >/dev/null'
function test1() {

set -x

trap 'kill -TERM $fils2 >/dev/null 2>&1' USR1

( eval $cmd && \
sleep 0.1 && \
kill -USR1 $$ ) &
fils1=3D$!

( sleep 10 && \
kill $fils1 >/dev/null 2>&1 ) &
fils2=3D$!

# attend que tout se termine
wait $fils2
trap - USR1

return 0
}

test1
exit $?


* Si je lance le programme depuis l'invite du shell, tout va bien :
$ time ./testSleep
+ trap 'kill -TERM $fils2 >/dev/null 2>&1' USR1
+ fils1=3D13248
+ sleep 10
+ fils2=3D13249
+ wait 13249
+ eval ls '>/dev/null'
++ ls
+ sleep 0.1
+ kill -USR1 13247
++ kill -TERM 13249
+ trap - USR1
+ return 0
+ exit 0

real 0m0.116s
user 0m0.000s
sys 0m0.004s


* si je r=E9cup=E8re la sortie standard du programme dans une variable
bash, ma commande prend 10 secondes :
$ time res=3D$(./testSleep)
+ trap 'kill -TERM $fils2 >/dev/null 2>&1' USR1
+ eval ls '>/dev/null'
++ ls
+ fils1=3D14416
+ sleep 10
+ fils2=3D14418
+ wait 14418
+ sleep 0.1
+ kill -USR1 14415
++ kill -TERM 14418
+ trap - USR1
+ return 0
+ exit 0

real 0m10.015s
user 0m0.000s
sys 0m0.008s

[les traces jusqu'=E0 =AB + exit 0 =BB apparaissent imm=E9diatement]


Auriez-vous une explication =E0 ce ph=E9nom=E8ne ? Ou encore mieux une
solution ;-) ?

Fred.

2 réponses

Avatar
Bruno Muller
--=-dPrdZph7kbAjUnU9oSvk
Content-Type: text/plain; charset=ISO-8859-15
Content-Transfer-Encoding: quoted-printable

Hello,

Le mardi 11 décembre 2007 à 12:28 +0100, Frédéric BOITEUX a écrit :
Auriez-vous une explication à ce phénomène ? Ou encore mieux une
solution ;-) ?



Un contournement :)

aptitude install timeout

Bruno

--
BIEN FAIT !
M : Mais... Hé ! Au secours !
P : Quand je te disais que ma caisse à chat était pleine de sable
mouvant...

--=-dPrdZph7kbAjUnU9oSvk
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: Ceci est une partie de message
=?ISO-8859-1?Q?numériquement?= =?ISO-8859-1?Q?_signée?
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQBHXnl0uJD2bkb8m5sRAlbwAJoD9SqXb4DIA3yhrISlLrI1LVuqcQCgiKI1
l3uYOSXUV7/aFZfdyXF57oA =jFb5
-----END PGP SIGNATURE-----

--=-dPrdZph7kbAjUnU9oSvk--


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Petit Louis
Bruno Muller a écrit :
Hello,

Le mardi 11 décembre 2007 à 12:28 +0100, Frédéric BOITEUX a écrit :

Auriez-vous une explication à ce phénomène ? Ou encore mieux une
solution ;-) ?




Un contournement :)

aptitude install timeout

Bruno




Je ne connaissais pas, je vais connaître ! Merci, je me renseigne.

P'tit Louis.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact