Linux命令之trap - 在脚本中处理信号
来源:互联网 发布:艾迪芬奇的记忆 知乎 编辑:程序博客网 时间:2024/05/16 05:54
转自:http://codingstandards.iteye.com/blog/836588
用途说明
rap是一个shell内建命令,它用来在脚本中指定信号如何处理。比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序。如果要在Ctrl+C不退出程序,那么就得使用trap命令来指定一下SIGINT的处理方式了。trap命令不仅仅处理Linux信号,还能对脚本退出(EXIT)、调试(DEBUG)、错误(ERR)、返回(RETURN)等情况指定处理方式。
常用参数
trap [-lp] [[arg] sigspec ...]
格式:trap "commands" signals
当shell接收到signals指定的信号时,执行commands命令。
格式:trap signals
如果没有指定命令部分,那么就将信号处理复原。比如 trap INT 就表明恢复Ctrl+C退出。
格式:trap "" signals
忽略信号signals,可以多个,比如 trap "" INT 表明忽略SIGINT信号,按Ctrl+C也不能使脚本退出。又如 trap "" HUP 表明忽略SIGHUP信号,即网络断开时也不能使脚本退出。
格式:trap -p
格式:trap -p signal
把当前的trap设置打印出来。
格式:trap -l
把所有信号打印出来。
格式:trap "commands" EXIT
脚本退出时执行commands指定的命令。
格式:trap "commands" DEBUG
在脚本执行时打印调试信息,比如打印将要执行的命令及参数列表。
格式:trap "commands" ERR
当命令出错,退出码非0,执行commands指定的命令。
格式:trap "commands" RETURN
当从shell函数返回、或者使用source命令执行另一个脚本文件时,执行commands指定的命令。
使用示例
示例一
[root@new55 ~]# trap -p
[root@new55 ~]# trap "echo hello" INT
[root@new55 ~]# trap -p
trap -- 'echo hello' SIGINT
[root@new55 ~]# trap -p INT
trap -- 'echo hello' SIGINT
[root@new55 ~]# trap -p QUIT
[root@new55 ~]# Ctrl+C
[root@new55 ~]# hello
[root@new55 ~]#
示例二
[root@new55 ~]# 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
[root@new55 ~]#
示例三 在脚本中使用
下面的脚本用于检查和启动java程序。
第7行:找出正在运行的符合指定特征的进程;
第11行:如果找到了这样的进程,就杀掉;
第22行:以后台方式启动java程序;
第24行:得到刚启动的程序的pid;
第28行:对SIGTERM信号设置处理方式:结束启动的java程序;
第30行:等待后台进程结束。
Bash代码
#!/bin/sh#2007.05.06/07# 增加了杀掉LAST_PID功能# 增加了脚本退出时杀掉THIS_PID功能LAST_PID=$(ps -ef|grep 'java.*Zhenjiang'|grep -v grep|awk '{print $2}')echo "LAST_PID=$LAST_PID"if [ -n "$LAST_PID" ] && [ "$LAST_PID" -gt 0 ]; then echo "LAST PROCESS NOT EXIT, NOW KILL IT!" kill $LAST_PID sleep 1fiif ! cd ../opt/zhenjiang; then echo "CHANGE DIRECTORY FAILED" exit 1fijava -classpath .:./cpinterfaceapi.jar:./log4j-1.2.14.jar:./hyjc.jar:./smj.client.jar Zhenjiang &THIS_PID=$!echo "THIS_PID=$THIS_PID"trap "kill $THIS_PID" TERMwait
- Linux命令之trap - 在脚本中处理信号
- Linux命令之trap - 在脚本中处理信号
- Linux命令之trap - 在脚本中处理信号
- Linux命令trap - 在脚本中处理信号 例子
- trap命令--在脚本中处理信号
- Linux trap --在脚本中处理信号
- 我使用过的Linux命令之trap - 在脚本中处理信号
- 我使用过的Linux命令之trap - 在脚本中处理信号
- Trap命令之信号处理
- trap命令用于在shell程序中处理信号
- trap在shell脚本中捕捉信号的方法.
- 在shell中捕捉信号的trap命令
- 在shell中捕捉信号的trap命令
- 在SHELL中捕捉信号的TRAP命令
- 在shell中捕捉信号的trap命令
- 【转】在shell中捕捉信号的trap命令
- Linux之trap命令
- linux 下信号处理命令trap && linux下各种信号的意义
- Note on <Zend Framework - A Beginner's Guide> - 02 ZF原理;继续解决第二章的问题
- python 中文乱码问题深入分析
- android 常用adb 和 adb shell 命令
- 如何创建ASM实例
- 文件名排序算法单元类
- Linux命令之trap - 在脚本中处理信号
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- Android学习笔记(25) --- 硬键盘+GridView选择Item问题
- 又见一帘幽梦
- 排列的字典序问题
- sharepoint 消息提示框
- 软件开发模型综述
- Delphi中有看不见的异常字符存在的解决方法
- Java Random类深入分析