চেষ্টা করুন:
#!/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
)।