Signals और trap
In this page:
trap 'commands' EXIT
trap 'commands' SIGNAL
Cleanup with an EXIT Trap
trap commands EXIT ऐसा code register करता है जो script exit होने पर automatically run होता है, चाहे यह normally खत्म हुआ हो, exit hit किया हो, या fail हुआ हो, जो इसे cleanup (जैसे temp files हटाना) होने की guarantee देने का standard तरीका बनाता है।
उदाहरण: Cleanup with an EXIT Trap
#!/bin/bash
trap 'echo "cleanup: removing temp file"; rm -f /tmp/trap_demo_$$.txt' EXIT
echo "work" > "/tmp/trap_demo_$$.txt"
echo "doing some work..."
Login to try C/C++/Java/PHP code in the editor
Handling a Self-Sent Signal Safely
SIGUSR1 एक user-defined signal है जिसका default action, trap न किए जाने पर, सिर्फ process terminate करना है; इसे trap करना एक script को एक self-sent (या externally sent) signal पर outright kill होने के risk के बिना react करने देता है, SIGTERM या SIGINT के विपरीत जो demonstrate करने के लिए riskier हैं।
उदाहरण: Handling a Self-Sent Signal Safely
#!/bin/bash
handle_usr1() {
echo "received SIGUSR1, handling it gracefully"
}
trap handle_usr1 SIGUSR1
kill -SIGUSR1 $$
echo "script continues normally after the signal was handled"
Login to try C/C++/Java/PHP code in the editor
Combining Multiple Traps
एक script अलग signals के लिए अलग handlers register कर सकता है, और एक EXIT trap एक signal-triggered handler run होने के बाद भी fire होगा, जो आपको signal-specific reactions को general cleanup से अलग करने देता है।
उदाहरण: Combining Multiple Traps
#!/bin/bash
trap 'echo "final cleanup ran"' EXIT
trap 'echo "custom SIGUSR1 handler ran"' SIGUSR1
kill -SIGUSR1 $$
echo "main script logic continues"
Login to try C/C++/Java/PHP code in the editor
Resetting a Trap
trap - SIGNAL पहले set किए गए handler को हटाता है और signal के default behavior को restore करता है, जो उपयोगी है जब script का एक risky section जिसे special handling चाहिए थी पूरा हो जाए।
उदाहरण: Resetting a Trap
#!/bin/bash
trap 'echo "handler active"' SIGUSR1
kill -SIGUSR1 $$
trap - SIGUSR1
echo "handler removed, back to default behavior for SIGUSR1"
Login to try C/C++/Java/PHP code in the editor
- यह भूल जाना कि EXIT trap script के हर तरह के exit पर fire होता है, सिर्फ errors पर नहीं।
- एक teaching example के रूप में खुद को SIGTERM या SIGINT भेजना और यह देखकर surprised होना कि script असल में terminate हो जाता है; एक trapped signal अब भी process को खत्म कर सकता है अगर handler इसे prevent न करे, और script का exit status 128+signal number बन जाता है।
- एक signal के लिए trap को उस point के बाद set करना जहां यह occur हो सकता था, उस window को miss करते हुए जिसे यह guard करने वाला था।
trap commands EXITcommandsको script के exit होने पर, किसी भी कारण से, run करता है, जो इसे cleanup के लिए ideal बनाता है।trap commands SIGNALcommandsको उस specific signal आने पर run करता है, signal के default action के बजाय।kill -SIGNAL $$current script की अपनी process को एक signal भेजता है।- एक process जो एक fatal signal receive करती है और इसे पूरी तरह handle नहीं करती typically 128 + signal number status के साथ exit होती है।
Chapter Quiz — Complete all 12 topics to unlock
0/12 topics done
Complete these topics first: