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个信号