Mencoba:
#!/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"
Biasanya, bashakan mengabaikan sinyal apa pun saat proses anak dieksekusi. Memulai server dengan &latar belakang akan ke sistem kontrol pekerjaan shell, dengan $!memegang PID server (untuk digunakan dengan waitdan kill). Panggilan waitkemudian akan menunggu pekerjaan dengan PID yang ditentukan (server) selesai, atau untuk sinyal yang akan dipecat .
Ketika shell menerima SIGTERM(atau server keluar secara independen), waitpanggilan akan kembali (keluar dengan kode keluar server, atau dengan nomor sinyal + 128 jika sinyal diterima). Setelah itu, jika shell menerima SIGTERM, ia akan memanggil _termfungsi yang ditentukan sebagai pengendali perangkap SIGTERM sebelum keluar (di mana kami melakukan pembersihan dan menyebarkan sinyal secara manual ke proses server menggunakan kill).