一尘不染

在Bash中识别接收到的信号名称

linux

收到信号后,我可以使用来执行一些命令trap。例:

trap 'echo hello world' 1 2

如果收到指定的任何信号,则显示“ hello world”。

但是如何打印/识别接收到的信号名称?


阅读 250

收藏
2020-06-03

共1个答案

一尘不染

(如果您只有一个信号编号并想要一个名称,则kill -l $SIGNAL_NUM打印一个信号名称;您可以通过使用信号名称代替trap下面的调用中的数字来避免这种情况。)

码:

#!/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

echo "Send signals to PID $$ and type [enter] when done."
read # Wait so the script doesn't exit.

如果运行该命令,则可以向该进程发送信号,并得到如下输出

Trapped: INT
Trapped: TERM
Trapped: EXIT
2020-06-03