|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!trap下令用于指定在吸收到旌旗灯号后将要接纳的举措。罕见的用处是在剧本步伐被中止时完成清算事情。不外,此次我碰到它,是由于客户有个需求:从终端会见办事器的用户,其上岸办事器后会主动运转某个下令,比方翻开使用(下令写在.bashrc等文件中),最初加入,并断开毗连;时代是不克不及同意其利用Ctrl+C等中止加入使用,而回到Shell情况,不然大概会带来宁静成绩。
固然,办理的体例有良多,如在使用中屏障中止旌旗灯号、利用chroot体例会见等。但这些***都有一些限定,如必要修正使用,让telnet等撑持chroot体例(ssh可撑持chroot)等。而利用trap也是一种对照好的办理***。
1、关于旌旗灯号
汗青上,shell老是用数字来代表旌旗灯号,而新的剧本步伐应当利用旌旗灯号的名字,它们保留在用#include下令包括出去的signal.h头文件中,在利用旌旗灯号名时必要省略SIG前缀。
kill和trap等都能够看到旌旗灯号编号及其联系关系的称号。“旌旗灯号”是指那些被异步发送到一个步伐的事务。默许情形下,它们一般会停止一个步伐的运转。
援用
#trap-l
1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL
5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE
9)SIGKILL10)SIGUSR111)SIGSEGV12)SIGUSR2
13)SIGPIPE14)SIGALRM15)SIGTERM17)SIGCHLD
18)SIGCONT19)SIGSTOP20)SIGTSTP21)SIGTTIN
22)SIGTTOU23)SIGURG24)SIGXCPU25)SIGXFSZ
26)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGIO
30)SIGPWR31)SIGSYS34)SIGRTMIN35)SIGRTMIN+1
36)SIGRTMIN+237)SIGRTMIN+338)SIGRTMIN+439)SIGRTMIN+5
40)SIGRTMIN+641)SIGRTMIN+742)SIGRTMIN+843)SIGRTMIN+9
44)SIGRTMIN+1045)SIGRTMIN+1146)SIGRTMIN+1247)SIGRTMIN+13
48)SIGRTMIN+1449)SIGRTMIN+1550)SIGRTMAX-1451)SIGRTMAX-13
52)SIGRTMAX-1253)SIGRTMAX-1154)SIGRTMAX-1055)SIGRTMAX-9
56)SIGRTMAX-857)SIGRTMAX-758)SIGRTMAX-659)SIGRTMAX-5
60)SIGRTMAX-461)SIGRTMAX-362)SIGRTMAX-263)SIGRTMAX-1
64)SIGRTMAX
附录中有个申明文档。
2、trap的利用
1、运转格局
trap下令的参数分为两局部,前一局部是吸收到指定旌旗灯号时将要接纳的举动,后一局部是要处置的旌旗灯号名。
trapcommandsignal
它有三种情势分离对应三种分歧的旌旗灯号回应体例。
第一种:
trap"commands"signal-list
当剧本收到signal-list清单内列出的旌旗灯号时,trap下令实行双引号中的下令。
第二种:
trapsignal-list
trap不指定任何下令,承受旌旗灯号的默许操纵,默许操纵是停止历程的运转。
第三种:
trap""signal-list
trap下令指定一个空下令串,同意无视旌旗灯号,我们用到的就是这一种。
※请记着,剧本步伐一般是以从上到下的按次注释实行的,以是必需在你想回护的那局部代码之前指定trap下令。
2、测试
依照用户的请求,我们必要屏障的是HUPINTQUITTSTP几个旌旗灯号。以是,能够运转:
#trap""HUPINTQUITTSTP
这个时分,能够尝尝翻开一个延续的下令,然后中止其运转,比方:
#tail-f/var/log/messages
接着,尝尝用Ctrl+C或Ctrl+来中止尝尝,会步伐是不会加入的。
3、规复旌旗灯号
假如想规复的话,能够用Ctrl+Z把步伐放到背景,然后运转:
#trap:HUPINTQUITTSTP
然后,用ps-ef看看其PID号,bg1让步伐持续运转,最初用kill杀失落便可。
4、其他
您也能够尝尝运转:
#trap"echoHelloWorld"HUPINTQUITTSTP
如许,当您运转Ctrl+C等中止时,会主动运转echo下令,了局就是实际HelloWorld字符串:
援用
#tail-f/var/log/messages
May1816:57:54192.168.228.153dhcpd:DHCPREQUESTfor192.168.228.221from00:1d:72:92:d4:68viaeth0
May1816:57:54192.168.228.153dhcpd:DHCPACKon192.168.228.221to00:1d:72:92:d4:68viaeth0
[root@mail~]#HelloWorld
※注重,这体例其实不能屏障中止,敲进Ctrl+C等信息后,仍以默许举动举措的,也就是加入步伐,仅会再运转一个分外的下令罢了。
3、附录
1、中止按键
分歧的终端范例、Shell版本个中断的按键是分歧的,乃至还能够自界说,这可经由过程stty下令查询:
援用
#stty-a
speed38400baud;rows30;columns111;line=0;
intr=^C;quit=^;erase=^?;kill=^U;eof=^D;eol=;eol2=;start=^Q;stop=^S;
susp=^Z;rprnt=^R;werase=^W;lnext=^V;flush=^O;min=1;time=0;
-parenb-paroddcs8-hupcl-cstopbcread-clocal-crtscts
-ignbrk-brkint-ignpar-parmrk-inpck-istrip-inlcr-igncricrnlixon-ixoff-iuclc-ixany-imaxbel
opost-olcuc-ocrnlonlcr-onocr-onlret-ofill-ofdelnl0cr0tab0bs0vt0ff0
isigicanoniextenechoechoeechok-echonl-noflsh-xcase-tostop-echoprtechoctlechoke
^就是Ctrl的缩写。
2、旌旗灯号概况
援用
称号默许举措申明
SIGHUP停止历程终端线路挂断
SIGINT停止历程中止历程
SIGQUIT创建CORE文件停止历程,而且天生core文件
SIGILL创建CORE文件不法指令
SIGTRAP创建CORE文件跟踪自陷
SIGBUS创建CORE文件总线毛病
SIGSEGV创建CORE文件段不法毛病
SIGFPE创建CORE文件浮点非常
SIGIOT创建CORE文件实行I/O自陷
SIGKILL停止历程杀逝世历程
SIGPIPE停止历程向一个没有读历程的管道写数据
SIGALARM停止历程计时器到时
SIGTERM停止历程软件停止旌旗灯号
SIGSTOP中断历程非终端来的中断旌旗灯号
SIGTSTP中断历程终端来的中断旌旗灯号
SIGCONT疏忽旌旗灯号持续实行一个中断的历程
SIGURG疏忽旌旗灯号I/O告急旌旗灯号
SIGIO疏忽旌旗灯号形貌符上能够举行I/O
SIGCHLD疏忽旌旗灯号当子历程中断或加入时关照父历程
SIGTTOU中断历程背景历程写终端
SIGTTIN中断历程背景历程读终端
SIGXGPU停止历程CPU时限超时
SIGXFSZ停止历程文件长渡过长
SIGWINCH疏忽旌旗灯号窗口巨细产生变更
SIGPROF停止历程统计散布图用计时器到时
SIGUSR1停止历程用户界说旌旗灯号1
SIGUSR2停止历程用户界说旌旗灯号2
SIGVTALRM停止历程假造计时器到时
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们! |
|