Nhiều ví dụ để trap
sử dụng trap ... INT TERM EXIT
cho các nhiệm vụ dọn dẹp. Nhưng nó có thực sự cần thiết để liệt kê tất cả ba sigspec?
Hướng dẫn nói:
Nếu một TÍN HIỆU là EXIT (0) ARG được thực thi khi thoát khỏi trình bao.
mà tôi tin rằng áp dụng cho dù tập lệnh kết thúc bình thường hay nó kết thúc bởi vì nó nhận được SIGINT
hoặc SIGTERM
. Một thí nghiệm cũng xác nhận niềm tin của tôi:
$ 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
Vậy thì tại sao nhiều ví dụ liệt kê tất cả INT TERM EXIT
? Hoặc tôi đã bỏ lỡ một cái gì đó và có trường hợp nào một đế EXIT
sẽ bỏ lỡ?
INT TERM EXIT
mã dọn dẹp được thực thi hai lần khiSIGTERM
hoặcSIGINT
được nhận.