Shell编程之Linux信号及信号跟踪
一、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信号及信号跟踪的更多相关文章
- shell编程之awk命令详解
shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...
- 03 shell编程之case语句与函数
本文所有内容均来自当年博主当年学习笔记,若有不足欢迎指正 Shell编程之case语句与函数 学习目标: 掌握case语句编程 掌握shell函数的使用 目录结构: Case语句 Case语句的作用 ...
- shell编程之case分支语句
shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...
- shell编程之if语句
shell编程之if判断 目录 shell编程之if判断 1.整数比较 2.字符串比较 3.举例 1.数字比较 2.字符串比较 4.Other 1.整数比较 -eq 等于,如:if [ "$ ...
- shell编程之sed编辑器&gawk程序
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/560372 s ...
- 多线程编程之Linux环境下的多线程(二)
上一篇文章中主要讲解了Linux环境下多线程的基本概念和特性,本文将说明Linux环境下多线程的同步方式. 在<UNIX环境高级编程>第二版的“第11章 线程”中,提到了类UNIX系统中的 ...
- Shell编程之Expect自动化交互程序
一.Expect自动化交互程序 1.spawn命令 通过spawn执行一个命令或程序,之后所有的Expect操作都会在这个执行过的命令或程序进程中进行,包括自动交互功能. 语法: spawn [ 选项 ...
- shell编程之trap命令
trap command signal trap捕获信号(软中断),command一般是linux命令 若为' '表示发生陷阱时为空指令,'-'表示发生陷阱时采用缺省指令 signal: HUP(1 ...
- shell编程之BASH变量(2)
变量命名规范 在bash中,变量的默认类型都是字符串型,定义 name = 'kk' 变量分类 用户自定义变量.变量自定义的 环境变量:这种变量中主要保存的是和系统操作环境相关的数据.变量可以自定义, ...
随机推荐
- php 设置地区时间
date_default_timezone_set('Asia/ShangHai');
- 第一百七十三节,jQuery,Ajax
jQuery,Ajax 学习要点: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax()方法 6 ...
- Servlet 发送电子邮件
使用 Servlet 发送一封电子邮件是很简单的,但首先您必须在您的计算机上安装 JavaMail API 和 Java Activation Framework)JAF). 您可以从 Java 网站 ...
- java中.currentTimeMillis的用法和含义
用法:可以用法获取当前时间的毫秒数,可以通过毫秒数进行时间比较,时间转化以及时间格式化等.public class SystemTime {public static void main(String ...
- 关闭数据库时SHUTDOWN: waiting for active calls to complete.处理
有时候在关闭数据库时,发出shutdown immediate;命令后一直未关闭.查看ALERT日志.在等待一段时间后日志中有提示: SHUTDOWN: waiting for active call ...
- mysql增加自定义函数功能
mysql默认是不能自定义函数的 当create function时 This function has none of DETERMINISTIC, NO SQL, or READS SQL DAT ...
- 生产者——消费者模型的java代码实现
生产者 import java.util.Random; public class Producer extends Thread { private Storage<Product> s ...
- [Spring Data Repositories]学习笔记--定义自己的repository
有时,我们会需要用到自己定义的一些查询方法,可以按照下面几步进行. 1. 定义一个包含该方法的接口 Interface UserRepositoryCustom { public void someC ...
- Linux 下安装svn
安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图: 我们知道svn在bin目录下生成了几个二进制文件. 输入 ...
- alert弹窗方法1
1.代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv=&quo ...