一、Linux信号

1.什么是信号?

Linux信号是由一个整数构成的异步消息,它可以由某个进程发给其他进程,也可以在用户按下特定键发生某种异常事件时,由系统发给某个进程。

2.信号列表

[root@codis-178 ~]# 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

3.使用trap控制信号

用途:

  • 在脚本程序被中断时完成清理工作
  • 屏蔽用户非法使用的某些信号

trap命令:

trap command signal

说明:

  • command 接收到指定信号时将要采取的行动
  • signal 要处理的信号名

(1)测试trap命令捕获ctrl + c信号

[root@codis-178 ~]# trap 'echo oldboy' 2
[root@codis-178 ~]# ^Coldboy [root@codis-178 ~]# ^Coldboy [root@codis-178 ~]# trap 'echo oldgirl' INT
[root@codis-178 ~]# ^Coldgirl

stty可以列出中断信号与键盘的对应信息

[root@codis-178 ~]# stty -a
speed 38400 baud; rows 34; columns 192; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

(2)测试按下ctrl + c组合键而引发的INT(2)信号

[root@codis-178 ~]# trap "" 2
[root@codis-178 ~]# trap ":" 2
[root@codis-178 ~]# ^C
[root@codis-178 ~]# trap "echo -n 'you are typing ctrl+c'" 2
[root@codis-178 ~]# ^Cyou are typing ctrl+c
[root@codis-178 ~]# ^Cyou are typing ctrl+c

(3)同时处理多个信号

[root@codis-178 ~]# trap "" 1 2 3 20 15
[root@codis-178 ~]# trap ":" 1 2 3 20 15
[root@codis-178 ~]# ^C
[root@codis-178 ~]# trap "" `echo (1..64)` #屏蔽1-64的所有信号

4.企业应用

(1)实现触发信号后清理文件的功能

[root@codis-178 ~]# cat 17_1.sh
#!/bin/bash
#Author:xiaoda
#Time:2017-09-06 10:47:59
#Name:17_1.sh
#Version:V1.0
#Description:This is a test script trap "find /tmp -type f -name "oldboy_*"|xargs rm -f && exit" INT
while true
do
touch /tmp/oldboy_$(date +%F-%H-%M-%S)
sleep 3
ls -l /tmp/oldboy*
done
[root@codis-178 ~]# sh 17_1.sh
-rw-r--r-- 1 root root 0 Sep 6 10:50 /tmp/oldboy_2017-09-06-10-50-54
-rw-r--r-- 1 root root 0 Sep 6 10:50 /tmp/oldboy_2017-09-06-10-50-54
-rw-r--r-- 1 root root 0 Sep 6 10:50 /tmp/oldboy_2017-09-06-10-50-57
-rw-r--r-- 1 root root 0 Sep 6 10:50 /tmp/oldboy_2017-09-06-10-50-54
-rw-r--r-- 1 root root 0 Sep 6 10:50 /tmp/oldboy_2017-09-06-10-50-57
-rw-r--r-- 1 root root 0 Sep 6 10:51 /tmp/oldboy_2017-09-06-10-51-00
^C[root@codis-178 ~]# ls -l /tmp
total 4
drwxr-xr-x 2 root root 4096 Sep 5 18:40 hsperfdata_root
srwxrwxrwx 1 mysql mysql 0 Feb 9 2017 mysql.sock

(2)企业级Shell跳板机

要求用户登录到跳板机后只能执行管理员给定的选项动作,不允许以任何形式中断脚本而到跳板机服务器上执行系统命令。

echo '[ $UID -ne 0 ] && . /server/scripts/jump.sh' >/etc/profile.d/jump.sh

[root@codis-178 ~]# cat jump.sh
#!/bin/bash
#Author:xiaoda
#Time:2017-09-06 10:56:56
#Name:jump.sh
#Version:V1.0
#Description:This is a test script trapper(){
trap ":" INT EXIT TSTP TERM HUP
} main(){
while :
do
trapper
clear
cat <<menu
1)WEB01-192.168.1.1
2)WEB01-192.168.1.2
3)DB01-172.16.1.1
menu
read -p "Pls input a num:" num
case "$num" in
1)
echo 'login in 192.168.1.1'
2)
echo 'login in 192.168.1.2'
3)
echo 'login in 172.16.1.1'
*)
echo 'select error.'
esac
done
}
main

Shell编程之Linux信号及信号跟踪的更多相关文章

  1. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  2. 03 shell编程之case语句与函数

    本文所有内容均来自当年博主当年学习笔记,若有不足欢迎指正 Shell编程之case语句与函数 学习目标: 掌握case语句编程 掌握shell函数的使用 目录结构: Case语句 Case语句的作用 ...

  3. shell编程之case分支语句

    shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...

  4. shell编程之if语句

    shell编程之if判断 目录 shell编程之if判断 1.整数比较 2.字符串比较 3.举例 1.数字比较 2.字符串比较 4.Other 1.整数比较 -eq 等于,如:if [ "$ ...

  5. shell编程之sed编辑器&gawk程序

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...

  6. 多线程编程之Linux环境下的多线程(二)

    上一篇文章中主要讲解了Linux环境下多线程的基本概念和特性,本文将说明Linux环境下多线程的同步方式. 在<UNIX环境高级编程>第二版的“第11章 线程”中,提到了类UNIX系统中的 ...

  7. Shell编程之Expect自动化交互程序

    一.Expect自动化交互程序 1.spawn命令 通过spawn执行一个命令或程序,之后所有的Expect操作都会在这个执行过的命令或程序进程中进行,包括自动交互功能. 语法: spawn [ 选项 ...

  8. shell编程之trap命令

    trap command  signal trap捕获信号(软中断),command一般是linux命令 若为' '表示发生陷阱时为空指令,'-'表示发生陷阱时采用缺省指令 signal: HUP(1 ...

  9. shell编程之BASH变量(2)

    变量命名规范 在bash中,变量的默认类型都是字符串型,定义 name = 'kk' 变量分类 用户自定义变量.变量自定义的 环境变量:这种变量中主要保存的是和系统操作环境相关的数据.变量可以自定义, ...

随机推荐

  1. 调试node.js应用--node-inspector

    如果你在编写Node.js代码,node-inspector是必备之选,比Node.js的内置调试器好出许多.使用起来跟Chrome的javascript调试器很相似. 使用npm安装: $ npm ...

  2. TP中单字母快捷函数总结

    ThinkPHP中有许多使用简便的单字母函数,可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找.1.U() URL组装 支持不同URL模式 U($ur ...

  3. 访问 JavaBean 对象的属性

    在 <jsp:useBean> 标签主体中使用 <jsp:getProperty/> 标签来调用 getter 方法,使用 <jsp:setProperty/> 标 ...

  4. ios -bitmap上下文生成图片 生成水印

    - (void)test { // 0. 加载背景图片 UIImage *image = [UIImage imageNamed:@"psb"]; // 1.创建bitmap上下文 ...

  5. JDK的命令具体解释操作

    JDK的命令具体解释1 rmic 功能说明: rmic 为远程对象生成 stub 和 skeleton. 语法: rmic [ options ] package-qualified-class-na ...

  6. C#实现按键精灵的'找图' '找色' '找字'的功能

    http://www.cnblogs.com/JimmyBright/p/4355862.html 背景:游戏辅助功能通常使用按键精灵编写脚本,按键精灵的最大卖点就是能够找到画面中字,图,色,这对于模 ...

  7. Oracle 常用

    1. 级联查询 在ORACLE 数据库中有一种方法可以实现级联查询select *                //要查询的字段from table              //具有子接点ID与父 ...

  8. mysql编译参数详解(./configure)

    1.--prefix=PREFIX:指定程序安装路径: 2.--enable-assembler:使用汇编模式:(文档说明:compiling in x86 (and sparc) versions  ...

  9. TestClass必须是public的

    运行一个测试类遇到一下问题: namespace TestSample.Sample {     [TestClass]     class CynthiaTest     {         [Te ...

  10. SVN中分支的建立与合并

    转载    出处:http://yaozhong1988.blog.163.com/blog/static/141737885201162671635126/ 一.  SVN分支的意义:     简单 ...