Linux 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文件  终止进程,并且生成core文件
SIGILL     建立CORE文件        非法指令
SIGTRAP   建立CORE文件         跟踪自陷
SIGBUS     建立CORE文件        总线错误
SIGSEGV   建立CORE文件         段非法错误
SIGFPE     建立CORE文件        浮点异常
SIGIOT     建立CORE文件        执行I/O自陷
SIGKILL   终止进程       杀死进程
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 终止进程       虚拟计时器到时

2.我一开始思路是lscore目录文件grep是否有文件名,然后判断字符串,发现不好用,因为没有文件的时候字符串不是空,是一个换行。但是在这个地方用到了判断字符串是否为空。mark一下
if [ -n $string ] 判断string非null
if [ -z $string ] 判断string是null

3.子进程获取父进程进程号
进程获取自己进程号 $$
进程获取父进程号   $PPID

4.杀死所有子进程
因为如果父进程执行完毕后,检测core的进程都没有发现core,所有子进程还存在,这就是传说中的僵尸进程。所以要杀死父进程所有子进程。
kill -9 0——杀死脚本自己及衍生出来的子进程


然后最后贴上我的源码:
callcore.sh
#! /bin/bash
#调用coretest.sh 检测core

trap 'echo trap core!!!;exit'   3

echo "father pid is $$"

./coretest.sh
while true
do
    sleep 5
done

coretest.sh
#! /bin/bash
#
#this shell script is designed to catch core,if corehappens,will 
#send the father to exit

echo "sub pid is $$"
echo "father pid is $PPID"

#sleep 2
#kill -3 $PPID

#rm -r corelog
while true
do
    files=`ls/home/doujinye/coresave/ | grep 'core'| grep -v "^$" | wc -l`
    echo "files is$files"
    if [ $files -gt 0]
    then
        echo "not empty"
        kill -3 $PPID;exit 1
    fi
    sleep 5
done

exit 1

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux trap是一种命令,用于在shell脚本中设置陷阱,以便在发生特定事件时执行某些操作。它可以用于捕获和处理信号,以及在脚本执行期间处理错误和异常情况。使用trap命令可以提高脚本的可靠性和稳定性。 ### 回答2: Linux trap 指的是在 Linux 操作系统中使用 trap 命令来捕获和处理信号的机制。在 Linux 中,信号是一种进程间通信的方式,用于通知进程发生的事件,如键盘输入、程序异常等。 trap 命令可以用来为进程注册一个信号处理函数。当进程接收到指定的信号时,会执行注册的处理函数来处理这个信号。trap 命令的语法如下: trap [命令] [信号] 其中,命令表示要执行的处理函数或命令,信号表示要捕获处理的信号。 通过使用 trap 命令,我们可以实现对不同信号的处理和控制。例如,我们可以使用 trap 命令来设置一个处理函数,当进程接收到中断信号(SIGINT)时,执行清理操作,并退出程序。 另外,trap 命令还可以用来屏蔽或忽略某些信号,或者在某个特定的时刻捕获和处理信号等。这种灵活的信号处理机制能够帮助我们实现更加健壮和可靠的程序。 总之,Linux 中的 trap 命令是一种用于捕获和处理信号的机制。通过使用 trap 命令,我们可以为进程注册信号处理函数,以实现对不同信号的响应和处理,从而提高程序的稳定性和可靠性。 ### 回答3: Linux trap 是用于捕捉信号的命令,也可以称之为信号陷阱。在Linux中,进程可以通过发送信号与其他进程进行通信或者进行进程管理。而trap命令则可以用来定义一个函数或者命令,在收到指定信号时执行特定的操作。 使用trap命令可以在Shell脚本中捕获指定的信号,比如SIGINT(中断信号)或者SIGTERM(终止信号),从而在收到这些信号时进行相应的处理。可以使用trap命令为指定信号设置处理函数或者指定命令,也可以使用trap命令屏蔽或者忽略指定的信号。 一个经典的用法是在脚本中使用trap命令来捕获SIGINT信号(通过按下Ctrl+C产生),以实现在脚本执行过程中可以通过按下Ctrl+C终止脚本执行的功能。另外,通过trap命令,还可以实现在收到指定信号之前或之后执行一些清理工作的功能。 例如,可以使用trap命令来定义一个函数,用于在脚本执行被中断时打印提示信息并执行清理工作,如关闭打开的文件等。然后使用trap命令将这个函数关联到SIGINT信号。这样,当脚本收到SIGINT信号时,会自动执行这个函数,实现了中断处理的逻辑。 总而言之,Linux trap 是一种用于捕捉信号的命令,可以在Shell脚本中通过设置处理函数或者指定命令,实现对收到指定信号时的处理。它为Shell脚本提供了更加灵活的信号处理方式,可以增强脚本的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值