Как подсказывает @oguz_ismail, порядок соответствует событиям.
Например, если вы управляете SIGINT
и EXIT
следующим образом:
#!/bin/bash
__die() { :;}
__ctrl_c() { :;}
trap __die EXIT
trap __ctrl_c INT
Вв случае SIGINT
(EG C-c
нажата или kill -2 "${pid}"
), вы всегда будете выполнять __ctrl_c
до __die
(если вы не заставите его иначе).
В качестве наилучшей практики я обычно пересылаюсигнал:
#!/bin/bash
__ctrl_c() {
printf "%b" "\n" >&2
printf "Interrupted by user ):\n"
# Avoid looping deleting trap
trap 2
# Resend sigint
kill -2 "$$"
}
trap __ctrl_c INT
Вы можете увидеть список сигналов с помощью trap -l
(по крайней мере, от bash 5) или kill -l
.
Если вам нужен какой-то определенный «шаблон» дляследуя ловушкам, вы можете форсировать сигнал с помощью kill -signal $$
.
Например, в __ctrl_c
вы можете отправить kill -15 $$
для вызова SIGTERM
Вы можете прочитать сигнал (7) и sigaction (2) для получения дополнительной информации.