Pembaruan:trap
membutuhkan penghapusan SIG
awalan dengan syarat, meskipun beberapa shell mendukung untuk memasukkannya. Lihat komentar di bawah.
Ampersand "&" menjalankan perintah di latar belakang dalam proses baru. Ketika proses induknya (perintah yang menjalankan skrip bash dalam kasus Anda) berakhir, proses latar belakang ini akan mengatur ulang proses induknya ke init (proses dengan PID
1), tetapi tidak akan mati. Saat Anda menekan ctrl+c
, Anda mengirimkan sinyal interupsi ke proses latar depan, dan itu tidak akan memengaruhi proses latar belakang.
Untuk mematikan proses latar belakang, Anda harus menggunakan kill
perintah dengan PID
proses latar belakang terbaru, yang dapat diperoleh dengan $!
.
Jika Anda ingin menggunakan ctrl+c
untuk menghentikan proses skrip dan latar belakang, Anda dapat melakukan ini:
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap
memodifikasi penangan jebakan dari SIGINT
(trap
mengharuskan menghapus SIG
awalan tetapi beberapa shell mungkin mendukung untuk memasukkannya) sehingga skrip akan mematikan proses dengan $BGPID
sebelum keluar.