op dit moment schrijf ik zo'n bash-script:
foo(){
while true
do
sleep 10
done
}
bar(){
while true
do
sleep 20
done
}
foo &
bar &
wait
(Ik weet dat zo'n script geen zin heeft, het gaat alleen om de structuur)
Nu wil ik signaalverwerking toevoegen met trap -- <doSomething> RTMIN+1
. Dit werkt in het begin. Als het script het rtmin 1 signaal ontvangt doet het wel iets, maar daarna bestaat het (met de 163 exit code, dat is het nummer van het signaal dat wordt verstuurd).
Dit is niet het gedrag dat ik wil. Ik wil dat het script na ontvangst van het signaal blijft wachten tot de processen (in dit geval de twee functies) worden beëindigd (wat in dit geval natuurlijk niet zal gebeuren, maar het script moet wachten).
Ik heb het geprobeerd met het toevoegen van een ; wait
aan de dingen die moeten worden gedaan bij het ontvangen van het signaal, maar dit helpt niet (of ik doe iets verkeerd).
Weet iemand hoe hij het gewenste gedrag kan bereiken?
Alvast bedankt en met de beste wensen.
EDIT: Misschien helpt een nauwkeuriger voorbeeld:
clock(){
local prefix=C
local interval=1
while true
do
printf ${prefix} $(date '+%d.%m %H:%M:%S')\n
sleep $interval
done
}
volume(){
prefix=V
volstat=$(amixer get Master 2>/dev/null)
echo $volstat | grep \[off\] >/dev/null && icon= #alternative: deaf: mute:
vol=$(echo $volstat | grep -o \[[0-9]\+%\] | sed s/[^0-9]*//g;1q)
if [ -z $icon ] ; then
if [ $vol -gt 50 ]; then
icon=
#elif [ $vol -gt 30 ]; then
# icon=
else
icon=
fi
fi
printf ${prefix}%s %3s%%\n $icon $vol
}
clock &
volume &
trap -- volume RTMIN+2
wait
Nu moet het RTMIN+2
signaal de volume
functie opnieuw uitvoeren, maar het clock
proces mag niet worden onderbroken. (Tot nu toe wordt het hele script (met alle subprocessen) beëindigd bij ontvangst van het signaal)