for tiden skriver jeg et bash script som dette:
foo(){
while true
do
sleep 10
done
}
bar(){
while true
do
sleep 20
done
}
foo &
bar &
wait
(Jeg vet at det ikke er noe poeng i et slikt manus, det handler bare om strukturen)
Nå vil jeg legge til signalhåndtering med trap -- <doSomething> RTMIN+1
. Dette fungerer med det første. Når skriptet mottar rtmin 1-signalet, gjør det noe, men etterpå eksisterer det (med 163 exit-koden, som er nummeret på signalet som sendes).
Dette er ikke den oppførselen jeg ønsker. Jeg vil at etter mottak av signalet, fortsetter skriptet å vente på at prosessene (i dette tilfellet de to funksjonene) skal avsluttes (noe som selvfølgelig ikke vil skje i dette tilfellet, men skriptet bør vente).
Jeg prøvde det med å legge til en ; wait
til tingene som bør gjøres når jeg mottar signalet, men dette hjelper ikke (eller jeg gjør noe galt).
Vet noen hvordan man oppnår ønsket atferd?
På forhånd takk og med beste ønsker.
EDIT: Kanskje et mer presist eksempel hjelper:
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
Nå RTMIN+2
signalet skal kjøres på nytt volume
funksjon, men clock
prosessen skal ikke avbrytes. (Til nå avsluttes hele skriptet (med alle delprosesser) når signalet mottas)