Linux命令——trap


參考:Shell Scripting Tutorial Trap

          IPC——信號

簡介

trap是shell內置命令,它對硬件信號和其他事件做出響應。trap定義並激活信號處理過程,信號處理過程是當shell接收信號或其他特殊條件時要運行的處理過程。

語法

trap [-lp] [[ARG] SIGNAL_SPEC...]

說明

trap定義並激活信號處理過程。 ARG是當shell接收信號SIGNAL_SPEC時要讀取和執行的命令。

如果ARG不存在(並且提供單個SIGNAL_SPEC)或ARG是破折號(“ - ”),則每個指定的信號被重置為其原始值。

trap 1 2 表示在執行腳本時,對信號 1 2采取默認動作

如果ARG是空字符串,則shell將忽略每個SIGNAL_SPEC及其調用的命令。

trap '' 1 2 3 15 表示在執行腳本時忽略信號1 2 3 15 

如果忽略一個信號,所有子shell也會忽略該信號。但是,如果您指定在接收信號時要采取的操作,則所有子殼仍將在接收到該信號時采取默認操作。

如果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    
View Code

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
View Code

-p:顯示與每個SIGNAL_SPEC相關的trap處理命令

root@ubuntu:~# trap -p
trap -- '' SIGTSTP
trap -- '' SIGTTIN
trap -- '' SIGTTOU
View Code

trap 'rm -f /tmp/xyz$$; exit' ERR EXIT

設置一個trap,在shell錯誤 或 shell退出時刪除臨時文件xyz $$。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM