shell从入门到精通之trap信号捕获处理

linux系统的信号处理

1. 查看linux系统中信号:

[root@master shell]# kill -l 或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. trap使用信号的方法
trap命令用于指定在接收到信号后采取的行动。trap命令的一种常见用途在脚本中断时,完成的清理工作。

下面信号是比较重要的信号:
HUB(1): 挂起,通常因终端掉线或用户退出引起;
INT(2): 中断,通常因按Ctrl +c而引发;
QUIT(3):退出,通常因按下ctrl +/引起;
ABRT(6):中止,通常因某些严重的错误引起;
ALRM(14):通常用来处理超时;
TERM(15):终止,通常在系统关机时发送;
TSTP(20):通常是ctrl +z发出的信号

3.trap命令语法格式

  trap command signal
  signal是接收到的信号;command是接受该信号采取的行动 

4.具体范例

范例1: 测试按下ctrl +c组合键引发的INT(2)信号

[root@master shell]# trap " " 2  ---------捕获到ctrl +c时,忽略
[root@master shell]# while true;do ping www.baidu.com;done
PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data.
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=1 ttl=49 time=6.59 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=2 ttl=49 time=11.1 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=3 ttl=49 time=9.81 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 6.592/9.187/11.160/1.919 ms
PING www.a.shifen.com (220.181.38.150) 56(84) bytes of data.
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=1 ttl=49 time=17.1 ms
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=2 ttl=49 time=6.44 ms
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=3 ttl=49 time=11.0 ms
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=4 ttl=49 time=6.21 ms
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=5 ttl=49 time=9.98 ms
^C
--- www.a.shifen.com ping statistics ---

```bash
所以ctrl +c无法停止。
[root@master shell]# trap “:” 2         -------恢复ctrl +c信号
[root@master shell]# trap "echo 'you are traping ctrl +c'" 2
[root@master shell]# ^Cyou are traping ctrl +c

[root@master shell]# ^Cyou are traping ctrl +c
[root@master shell]# trap "" `seq 64` --------屏蔽掉64个信号

  

你可能感兴趣的:(shell脚本从入门到精通,linux,centos,运维,shell)