Ответ 1
(Если у вас есть только номер сигнала и требуется имя, kill -l $SIGNAL_NUM
печатает имя сигнала, вы можете избежать этого, используя имена сигналов вместо номеров в своем обращении к trap
, как показано ниже. )
В этом ответе говорится, что единственный способ определить, какой сигнал вы попали в bash, - это написать отдельную оболочку для каждого другого сигнала, который вы хотите захватить. Другой ответ на тот же вопрос предоставляет функцию обертки, чтобы сделать это для вас:
код:
#!/bin/bash
trap_with_arg() {
func="$1" ; shift
for sig ; do
trap "$func $sig" "$sig"
done
}
func_trap() {
echo Trapped: $1
}
trap_with_arg func_trap INT TERM EXIT
read # Wait so the script doesn't exit.
Если я запустил это, тогда я могу отправить сигналы процессу, и я получаю вывод, например
Trapped: INT
Trapped: TERM
Trapped: EXIT