layout: post
title: 信号捕捉trap
date: 2017-12-31
tags: [“Linux”,”Shell脚本管理”]


trap: 内部命令
用法:

trap ‘触发指令’ 信号 #可以捕获信号,并使用其他的操作来代替。

trap ‘-‘ 信号 #恢复原信号

trap -p #列出自定义信号操作

作用:

kill -l 查看信号集列表

  1. [root@newhostname ~]# kill -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@newhostname ~]#

 

例:
捕获ctrl+c 信号2

  1. trap echo Do not break INT
    for i in {1..10};do
    echo $in
    sleep 0.5
    done

解释器会先读取trap命令,在处理之后的命令的过程中,当使用ctrl+c键时,会用输出’echo Do not break’来代替中断的作用。

例2(捕获ctrl+c,并不做任何操作):

  1. trap ‘’ 2
    for i in {1..10};do
    echo $i
    sleep 0.5
    done

 

文档更新时间: 2018-12-13 15:58   作者:张尚