वर्तमान में मैं इस तरह से एक बैश स्क्रिप्ट लिख रहा हूँ:
foo(){
while true
do
sleep 10
done
}
bar(){
while true
do
sleep 20
done
}
foo &
bar &
wait
(मुझे पता है कि इस तरह की स्क्रिप्ट का कोई मतलब नहीं है, यह सिर्फ संरचना के बारे में है)
अब मैं सिग्नल हैंडलिंग के साथ जोड़ना चाहता हूं trap -- <doSomething> RTMIN+1
। यह पहली बार में काम करता है। जब स्क्रिप्ट को rtmin 1 सिग्नल प्राप्त होता है तो यह doSomething करता है लेकिन बाद में यह मौजूद होता है (163 एक्जिट कोड के साथ, जो सिग्नल भेजे जाने की संख्या है)।
यह वह व्यवहार नहीं है जो मैं चाहता हूं। मैं चाहता हूं कि सिग्नल प्राप्त करने के बाद, स्क्रिप्ट प्रक्रिया (इस मामले में दो कार्यों) को समाप्त करने के लिए इंतजार करना जारी रखे (जो इस मामले में निश्चित रूप से नहीं होगा, लेकिन स्क्रिप्ट को इंतजार करना चाहिए)।
मैंने इसे जोड़ने की कोशिश की ; wait
सिग्नल प्राप्त करते समय उन चीजों को किया जाना चाहिए, लेकिन यह मदद नहीं करता है (या मैं कुछ गलत कर रहा हूं)।
क्या किसी को पता है कि वांछित व्यवहार कैसे प्राप्त किया जाए?
अग्रिम धन्यवाद और शुभकामनाओं के साथ।
संपादित करें: शायद अधिक सटीक उदाहरण मदद करता है:
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
अब RTMIN+2
संकेत फिर से होना चाहिए volume
समारोह, लेकिन clock
प्रक्रिया बाधित नहीं होनी चाहिए। (अब तक, पूरी स्क्रिप्ट (सभी उपप्रकारों के साथ) संकेत प्राप्त होने पर समाप्त हो जाती है)