Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [bash] opnieuw proberen tot programma meer dan 5 seconden loopt  (gelezen 1002 keer)

Ik ben met hetvolgende scriptje:

#!/bin/bash
g++ -o example0 `pkg-config --cflags playerc++` example0.cc `pkg-config --libs playerc++`
declare -i startstamp=0
declare -i endstamp=0
declare -i differ=0
wait
until [ $differ -gt 5 ]
do
player stingray.cfg&
sleep 1
startstamp = $(date +%s)
./example0
wait
endstamp = $(date +%s)
differ=$(( $endstamp-$startstamp ))
done

Aan het proberen om heel de loop te blijven uitvoeren totdat ./example0    voor meer dan 5 seconden draait.
Dit werkt echter niet, iemand een idee wat ik fout doe? (ik krijg geen foutmelding)
http://leerubuntu.org (ubuntu zonder moeilijke woorden)
VoidWarranties (Hackerspace) Antwerpen
Microsoft isn't evil, they just make really crappy operating systems. - Linus Torvalds

Offline edehont

  • Lid
Re: [bash] opnieuw proberen tot programma meer dan 5 seconden loopt
« Reactie #1 Gepost op: 2011/11/02, 23:58:04 »
De eerste 'wait' in je script lijkt me zinloos, omdat je niks in de achtergrond hebt lopen.

Je loop wordt telkens uitgevoerd, totdat ('player stingray.cfg' -1 seconde van de sleep) + example0 er samen een keer langer dan 5 seconden over hebben gedaan. Heeft het korter gedraaid, dan start je beiden nog een keer op. Mag, maar ik snap niet goed wat je er mee wil aantonen.

Als je example0 wilt monitoren en na een bepaalde tijd wilt afbreken zul je het VOOR de loop in de achtergrond moeten starten, periodiek checken of het nog draait en na de timeout er een kill-commando heen sturen. En dan liever een SIGINT dan een SIGKILL.

Je commando example0 is dan wel verantwoordelijk voor het afhandelen van de interrupt. Als je niks regelt wordt SIGINT (Lees: <CTRL>-C) waarschijnlijk wel correct afgehandeld, maar het hangt er van af of example0 onder water commando's uitvoert die SIGINT negeren. (Zal niet, doorgaans.)

Kijk eens of je van deze links iets wijzer wordt, ik ben er niet in gedoken.
http://www.bashcookbook.com/bashinfo/source/bash-4.0/examples/scripts/timeout
http://www.bashcookbook.com/bashinfo/source/bash-4.0/examples/scripts/timeout2
http://www.bashcookbook.com/bashinfo/source/bash-4.0/examples/scripts/timeout3

Met loopjes met sleeps om processen in de gaten te houden heb je altijd een overkill aan processing. Ofwel je loopt honderden keren voor jan met de korte achternaam, of je sleep ligt nog te snurken terwijl je te monitoren proces al lang klaar is.
Je wil eigenlijk een wait combineren met een timeout, zodat wie het eerst komt, het eerst maalt.
In Perl kan ik dat wel (met Perl Cookbook ernaast).

Ik heb zo snel geen nette Bash-oplossing hiervoor gezien. Maar ik ben absoluut geen Bash-held, dus dat zegt niks!
Groeten,
Eric

Re: [bash] opnieuw proberen tot programma meer dan 5 seconden loopt
« Reactie #2 Gepost op: 2011/11/03, 17:50:51 »
de spaties rond = in:
startstamp = $(date +%s)
endstamp = $(date +%s)
moeten weg
URD - http://www.urdland.com - Usenet Resource Downloader

Offline edehont

  • Lid
Re: [bash] opnieuw proberen tot programma meer dan 5 seconden loopt
« Reactie #3 Gepost op: 2011/11/05, 15:24:26 »
Dat zegt ook al iets, dat het script blijkbaar nooit aan die foute regels is toegekomen.
Groeten,
Eric