प्रयत्न, कोशिश:
#!/bin/bash
_term() {
echo "Caught SIGTERM signal!"
kill -TERM "$child" 2>/dev/null
}
trap _term SIGTERM
echo "Doing some initial work...";
/bin/start/main/server --nodaemon &
child=$!
wait "$child"
आम तौर पर, bash
किसी भी संकेत को अनदेखा करेगा , जबकि एक बच्चे की प्रक्रिया निष्पादित हो रही है। सर्वर के साथ शुरू करने से &
यह शेल के जॉब कंट्रोल सिस्टम में दिखाई देगा, $!
सर्वर के पीआईडी को पकड़े रहने के साथ ( wait
और इस्तेमाल किया जा सकता है kill
)। कॉलिंग wait
तब निर्दिष्ट पीआईडी (सर्वर) के साथ या समाप्त होने वाले किसी भी सिग्नल के लिए नौकरी की प्रतीक्षा करेगी ।
जब शेल प्राप्त होता है SIGTERM
(या सर्वर स्वतंत्र रूप से बाहर निकलता है), तो wait
कॉल वापस आ जाएगी (सर्वर से बाहर निकलने के कोड के साथ बाहर निकल रहा है, या सिग्नल नंबर + 128 के साथ सिग्नल के प्राप्त होने पर)। बाद में, यदि शेल को SIGTERM प्राप्त हुआ, तो यह _term
बाहर निकलने से पहले SIGTERM ट्रैप हैंडलर के रूप में निर्दिष्ट फ़ंक्शन को कॉल करेगा (जिसमें हम कोई भी क्लीनअप करते हैं और मैन्युअल रूप से उपयोग करते हुए सर्वर प्रक्रिया के लिए सिग्नल का प्रचार करते हैं kill
)।