trap
trap 是shell自带的捕获信号量的指令。trap命令用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作。
一、关于信号
历史上,shell总是用数字来代表信号,而新的脚本程序应该使用信号的名字,它们保存在用#include命令包含进来的signal.h头文件中,在使用信号名时需要省略SIG前缀。
kill和trap等都可以看到信号编号及其关联的名称。“信号”是指那些被异步发送到一个程序的事件。默认情况下,它们通常会终止一个程序的运行。
二、trap 的使用
1、运行格式
trap命令的参数分为两部分,前一部分是接收到指定信号时将要采取的行动,后一部分是要处理的信号名。
trap command signal
它有三种形式分别对应三种不同的信号回应方式。
第一种:
trap "commands" signal-list
当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令。
第二种:
trap signal-list
trap不指定任何命令,接受信号的默认操作,默认操作是结束进程的运行。
第三种:
trap " " signal-list
trap命令指定一个空命令串,允许忽视信号,我们用到的就是这一种。
※请记住,脚本程序通常是以从上到下的顺序解释执行的,所以必须在你想保护的那部分代码以前指定trap命令。
信号量详细列表可以trap -l即可显示
因为肯定有人现在手头没有linux机器,我就列出来吧
名称
默认动作
说明
SIGHUP
终止进程
通常因终端掉线或用户退出而引发
SIGINT
终止进程
中断进程
SIGQUIT
建立CORE文件
退出,通常因按下Ctrl+\组合键而引发
SIGILL
建立CORE文件
非法指令
SIGTRAP
建立CORE文件
跟踪自陷
SIGBUS
建立CORE文件
总线错误
SIGSEGV
建立CORE文件
段非法错误
SIGFPE
建立CORE文件
浮点异常
SIGIOT
建立CORE文件
执行I/O自陷
SIGKILL
终止进程
中断,通常因按下Ctrl+C组合键而引发
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 终止进程
虚拟计时器到时