Banyak contoh untuk trap
digunakan trap ... INT TERM EXIT
untuk tugas pembersihan. Tetapi apakah benar-benar perlu untuk mendaftar ketiga sigspec?
Manual mengatakan:
Jika SIGNAL_SPEC EXIT (0) ARG dijalankan saat keluar dari shell.
yang saya percaya berlaku apakah skrip selesai secara normal atau selesai karena diterima SIGINT
atau SIGTERM
. Eksperimen juga menegaskan keyakinan saya:
$ cat ./trap-exit
#!/bin/bash
trap 'echo TRAP' EXIT
sleep 3
$ ./trap-exit & sleep 1; kill -INT %1
[1] 759
TRAP
[1]+ Interrupt ./trap-exit
$ ./trap-exit & sleep 1; kill -TERM %1
[1] 773
TRAP
[1]+ Terminated ./trap-exit
Lalu mengapa begitu banyak contoh mendaftar semuanya INT TERM EXIT
? Atau apakah saya melewatkan sesuatu dan apakah ada kasus di mana solonya EXIT
akan terlewatkan?
INT TERM EXIT
kode pembersihan dijalankan dua kali ketikaSIGTERM
atauSIGINT
diterima.