trap:是bash的内建命令,是对Linux系统信号的捕捉,首先介绍一下Linux 信号。
最常见的Linux系统信号
信号 | 值 | 描述 |
---|---|---|
1 | SIGHUP | 挂起进程 |
2 | SIGINT | 终止进程 |
3 | SIGQUIT | 停止进程 |
9 | SIGKILL | 无条件终止进程 |
15 | SIGTERM | 可能的话终止进程 |
17 | SIGSTOP | 无条件停止进程,但不终止进程 |
18 | SIGTSTP | 停止或暂停进程,但不终止进程 |
19 | SIGCONT | 继续运行停止的进程 |
bash shell允许用键盘上的键组合生成两种基本的Linux信号,终止进程(Ctrl+C)和暂停进程(Ctrl+Z)
用trap命令来对Linux系统的信号进行捕捉,可以通过查看man builtin页面来搜索trap的帮助文档
命令格式:trap [-lp] commands signals commands为命令,signals表示需要捕捉的信号,如果有多个信号,用空格隔开
参数说明:
- -l:列出所有系统信号名字和对应的数字
- -p:打印出系统上与每一个信号相关的命令
例子:
1. 打印出系统上所有的信号
[clef@rhel6164 ~]$ trap -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
2. 捕捉‘Ctrl+C'简单例子
[clef@rhel6164 test]$ cat trap.sh #捕捉到键盘输入'Ctrl+C'就会输出echo命令
#!/bin/bash
trap "echo 'Sorry! I have trapped Ctrl+C'" SIGINT SIGTERM
sleep 100