信号和trap

来源:互联网 发布:移动宽带网络设置 编辑:程序博客网 时间:2024/04/30 01:39

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 "" 2tail -f /etc/passwd     # Ctrl+C can't quittrap 2tail -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
0 0
原创粉丝点击