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, bash
akan 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 wait
dan kill
). Panggilan wait
kemudian akan menunggu pekerjaan dengan PID yang ditentukan (server) selesai, atau untuk sinyal yang akan dipecat .
Ketika shell menerima SIGTERM
(atau server keluar secara independen), wait
panggilan akan kembali (keluar dengan kode keluar server, atau dengan nomor sinyal + 128 jika sinyal diterima). Setelah itu, jika shell menerima SIGTERM, ia akan memanggil _term
fungsi yang ditentukan sebagai pengendali perangkap SIGTERM sebelum keluar (di mana kami melakukan pembersihan dan menyebarkan sinyal secara manual ke proses server menggunakan kill
).