şu anda böyle bir bash betiği yazıyorum:
foo(){
while true
do
sleep 10
done
}
bar(){
while true
do
sleep 20
done
}
foo &
bar &
wait
(Böyle bir senaryoda bir anlamı olmadığını biliyorum, sadece yapı hakkında)
Şimdi ile sinyal işleme eklemek istiyorum trap -- <doSomething> RTMIN+1
. İlk başta çalışır. Komut dosyası rtmin 1 sinyalini aldığında doSomething yapar ancak daha sonra var olur (gönderilen sinyalin sayısı olan 163 çıkış kodu ile).
İstediğim davranış bu değil. Ben sinyal aldıktan sonra, komut dosyası (bu durumda iki işlev) sonlandırmak için beklemek devam ediyor istiyorum (tabii ki bu durumda olmayacak, ama komut dosyası beklemek gerekir).
Bir ekleyerek denedim ; wait
sinyal alırken yapılması gerekenler, ancak bu yardımcı olmaz (ya da yanlış bir şey yapıyorum).
İstenen davranışa nasıl ulaşılacağını bilen var mı?
Şimdiden teşekkürler ve en iyi dileklerimle.
EDIT: Belki daha kesin bir örnek yardımcı olur:
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
Şimdi RTMIN+2
sinyal yeniden çalıştırmalı volume
işlev, ancak clock
süreç kesintiye uğratılmamalıdır. (Şimdiye kadar, tüm komut dosyası (tüm alt süreçlerle) sinyalin alınması üzerine sonlandırılmıştır)