參考:Shell Scripting Tutorial Traphtml
IPC——信號shell
trap是shell內置命令,它對硬件信號和其餘事件作出響應。trap定義並激活信號處理過程,信號處理過程是當shell接收信號或其餘特殊條件時要運行的處理過程。ubuntu
trap [-lp] [[ARG] SIGNAL_SPEC...]ide
trap定義並激活信號處理過程。 ARG是當shell接收信號SIGNAL_SPEC時要讀取和執行的命令。函數
①若是ARG不存在(而且提供單個SIGNAL_SPEC)或ARG是破折號(「 - 」),則每一個指定的信號被重置爲其原始值。post
trap 1 2 表示在執行腳本時,對信號 1 2採起默認動做ui
②若是ARG是空字符串,則shell將忽略每一個SIGNAL_SPEC及其調用的命令。url
trap '' 1 2 3 15 表示在執行腳本時忽略信號1 2 3 15 spa
若是忽略一個信號,全部子shell也會忽略該信號。可是,若是您指定在接收信號時要採起的操做,則全部子殼仍將在接收到該信號時採起默認操做。.net
③若是SIGNAL_SPEC是EXIT(0),則在退出shell時執行ARG。
④若是SIGNAL_SPEC是DEBUG,則在每一個簡單命令以前執行ARG。
⑤若是SIGNAL_SPEC是RETURN,經過.或者內置命令source執行腳本或shell函數時,ARG都會執行。
⑥若是SIGNAL_SPEC是ERR一種,當shell執行時指定-e參數(執行腳本時指定-e參數,一旦出錯就退出當前shell),每次出錯退出都會執行ARG。
-l:打印信號名稱列表及其對應的數字。
root@ubuntu:~# 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
stty -a能夠顯示觸發某些信號的鍵位。
root@ubuntu:~# stty -a speed 38400 baud; rows 40; columns 96; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
-p:顯示與每一個SIGNAL_SPEC相關的trap處理命令
root@ubuntu:~# trap -p trap -- '' SIGTSTP trap -- '' SIGTTIN trap -- '' SIGTTOU
trap 'rm -f /tmp/xyz$$; exit' ERR EXIT
設置一個trap,在shell錯誤 或 shell退出時刪除臨時文件xyz $$。