转载地址:http://www.bubuko.com/infodetail-1623557.html
标签:trap捕捉信号
<--目录-->
1)trap介绍
2)trap信号列表
3)trap使用例子
4)测试INT(2)信号
5)同时测试多个信号
6)shell跳板机案例
【trap介绍】
通过trap命令用于指定在接收到信号后要采取的行动;trap命令的一种常见用途是在脚本程序被中断时完成清理工作,历吏上,shell总是用数字来代表信号
【trap信号列表】
下面列出一些比较重要的信号(括号里面的数字是传统的信号编号)
信号 说明
HUP(1) 挂起,通常因终端掉线或用户退出而引发
INT(2) 中断,通常因按下Crtl+C组合健而引发
QUIT(3) 退出,通常因某些严重的执行错误而引发
ABRT(6) 中止,通常因某些严重的执行错误而引发
ALRM(14) 报警,通常用来处理超时 |
TERM(15) 终止,通常在系统关机时发送
TSTP(20) 停止进程的运行,但该信号可以被处理和忽略,用户健入SUSP字符时(通常是Ctrl-Z)发出这个信号
【trap使用例子】
通常我们需要忽略的信号有HUP INT QUIT TSTP TERM,也就是信号1,2,3,20,15使用下面的语句可以使这些中断信号被忽略
trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名,如下例子:
########################
# trap command signal #
########################
signal是指收到的信号,command是指接收该信号采取的行动,如下为两种简单的信号
######################################################################################################
# trap "command(要执行的动作命令)" 1 2 3 20 15 或 trap "command(要执行的动作命令)" HUP INT QUIT TSTP #
######################################################################################################
【测试INT(2)信号】
[[email protected] ~]# trap "" 2 <== 屏蔽Ctrl+C信号,""引号里面为空,就是说你按了Crtl+C后,不做任何动作,相当于屏蔽了Ctrl+C
[[email protected] ~]# 此时无法执行Ctrl+C
[[email protected] ~]# trap ":" 2 <== 恢复ctrl+c信号
[[email protected] ~]# ^C <== 此时可以执行Crtl+C了
[[email protected] ~]# trap "echo -n ‘you are typing ctrl+c‘" 2 <== 按了Ctrl+C后接受到2的信号就会输出双引号里面的内容
[[email protected] ~]# ^Cyou are typing ctrl+c
[[email protected] ~]# ^Cyou are typing ctrl+c
[[email protected] ~]# ^Cyou are typing ctrl+c
[[email protected] ~]# trap ":" 2 <== 再还原本样Ctrl+C信号
[[email protected] ~]# ^C <== 此时再按Crtl+C变成原始的输出
【同时测试多个信号】
[[email protected] ~]# trap "" HUP INT QUIT TSTP TERM
[[email protected] ~]# trap ":" HUP INT QUIT TSTP TERM
[[email protected] ~]# trap "" 1 2 3 20 15
[[email protected] ~]# trap ":" 1 2 3 20 15
【shell跳板机案例】(触发信号后屏蔽信号)
方法:
1)首先做好ssh+key认证
2)实现传统的远程连接菜单选择脚本
3)利用Linux信号防止用户在跳板机上操作
4)用户登陆后即调用脚本
[[email protected] ~]# cat /etc/profile.d/tiaoban.sh
[ $UID -ne 0 ] && . /server/scripts/tiaoban.sh
[[email protected] ~]# cat /server/scripts/tiaoban.sh
function trapper () {
trap ‘:‘ INT EXIT TSTP TEMP HUP
}
while :
do
trapper #我在这里调用函数trapper,然则调用了上面五个信号,其有中Ctrl+c信号
clear #清屏
cat <<menu #终端打印出下面三排菜单供普通用户选择
1)web a
2)web b
3)exit
menu
read -p "please select:" num #让用户选择一个数字
case "$num" in
1)
echo 1
ssh 192.168.1.107
;;
2)
echo 2
ssh 192.168.1.108
;;
3|*)
exit
esac
done
普通用户测试登陆:
输入普通用户名和密码
在这里按Ctrl+c没效果,你必须选择敲一个数字连接,或者选择敲3退出
本文出自 “wsyht的博客” 博客,请务必保留此出处http://wsyht2015.blog.51cto.com/9014030/1790623