信号和trap

1. 信号:那些被异步发送到一个程序的事件

# trap -l
1) SIGHUP 终止进程,终端线路挂断
2) SIGINT 终止进程,中断进程(Ctrl-C)
3) SIGQUIT 终止进程,产生core文件(Ctrl-)
4) SIGILL 非法指令
9) SIGKILL 终止进程,杀死进程
15) SIGTERM 终止进程,软件终止信号
18) SIGCONT 忽略信号,继续执行一个停止的进程
19) SIGSTOP 停止进程,非终端来的停止信号
20) SIGTSTP 停止进程,终端来的停止信号

# 无法被忽略的信号
KILL(9)
STOP(17)
CONT(19)

# 可被捕获的信号
HUP(1)
INT (2, Ctrl-c)
QUIT (3, Ctrl-)
TERM (15)

2. trap 捕获信号,三种处理方式

1) 执行一段程序来处理这个信号
trap ‘cmds’ signals

2) 接受信号的默认操作
trap signals

3) 忽略信号
trap ’ ’ signals

# Ctrl-C/Ctrl-\ 打印提示并退出
trap 'echo "you hit Ctrl-C/Ctrl-\, now exiting.."; exit'  SIGINT SIGQUIT

# 使Ctrl-C无效
stty -a                 # 获取中断信号与键盘的对应关系
trap "" 2
tail -f /etc/passwd     # Ctrl+C can't quit
trap 2
tail -f /etc/passwd     # Normal

3. trap处理shell返回值

1) 脚本正常退出后,执行指定命令
trap “cmds” EXIT

2) 脚本执行时打印调试信息
trap “cmds” DEBUG

3) 当命令出错,退出码非0,执行指定的命令
trap “cmds” ERR

4) 从shell函数返回,或source另一个脚本文件时,执行指定的命令
trap “cmds” RETURN

# 追踪命令或函数的返回状态
trap 'echo "[LINE:$LINENO] Error: Command or function exited with status $?"' ERR

# 追踪命令执行后的详细结果
trap 'echo "Before execute line $LINENO: a=$a, b=$b, c=$c"' DEBUG
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值