活着的死人 发表于 2015-1-14 21:11:14

CentOS教程之CentOS下的trap下令

如果您觉得本篇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

#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教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!

愤怒的大鸟 发表于 2015-1-17 06:47:53

就这样,我们一边上OS理论课,一边上这个实验,这样挺互补的,老师讲课,一步一步地布置任务

第二个灵魂 发表于 2015-1-22 11:35:54

Linux的成功就在于用最少的资源最短的时间实现了所有功能,这也是符合人类进化的,相信以后节能问题会日益突出。

蒙在股里 发表于 2015-1-31 06:39:00

任何一个叫做操作系统的东西都是这样子构成的:内核+用户界面+一般应用程序。

变相怪杰 发表于 2015-2-18 04:36:53

应对Linux的发展历史和特点有所了解,Linux是抢占式多任务多用户操作系统,Linux最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具。

再现理想 发表于 2015-3-6 02:47:48

Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。

冷月葬花魂 发表于 2015-3-12 21:10:52

说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。?

若天明 发表于 2015-3-20 04:37:38

众所周知,目前windows操作系统是主流,在以后相当长的时间内不会有太大的改变,其方便友好的图形界面吸引了众多的用户。
页: [1]
查看完整版本: CentOS教程之CentOS下的trap下令