shell中trap捕捉到信號的處理

一. trap捕捉到信號以後,能夠有三種反應方式:shell


(1)執行一段程序來處理這一信號內存


(2)接受信號的默認操做it


(3)忽視這一信號變量


二. trap對上面三種方式提供了三種基本形式:程序


第一種形式的trap命令在shell接收到signal list清單中數值相同的信號時,將執行雙command


引號中的命令串。鍵盤


trap 'commands' signal-listco


trap "commands" signal-list系統


爲了恢復信號的默認操做,使用第二種形式的trap命令:


trap signal-list


第三種形式的trap命令容許忽視信號


trap " " signal-list



注意:


(1) 對信號11(段違例)不能捕捉,由於shell自己須要捕捉該信號去進行內存的轉儲。


(2) 在trap中能夠定義對信號0的處理(實際上沒有這個信號), shell程序在其終止(如


執行exit語句)時發出該信號。


(3) 在捕捉到signal-list中指定的信號並執行完相應的命令以後, 若是這些命令沒有


將shell程序終止的話,shell程序將繼續執行收到信號時所執行的命令後面的命令,這樣將


很容易致使shell程序沒法終止。


另外,在trap語句中,單引號和雙引號是不一樣的,當shell程序第一次碰到trap語句時,


將把commands中的命令掃描一遍。此時若commands是用單引號括起來的話,那麼shell不會


對commands中的變量和命令進行替換, 不然commands中的變量和命令將用當時具體的值來


kill -l能夠列出系統的信號

一般咱們須要忽略的信號有四個,即:HUP, INT, QUIT, TSTP,也就是信號1, 2, 3, 24

使用這樣的語句可使這些中斷信號被忽略:

trap "" 1 2 3 24 或 trap "" HUP INT QUIT TSTP

用 trap :1 2 3 24 或 trap HUP INT QUIT TSTP使其回覆默認值。

用stty -a能夠列出中斷信號與鍵盤的對應,分別執行上面的命令後,運行

tail -f /etc/passwd, 而後嘗試用鍵盤中斷,試試兩種狀況(默認和忽略)下有何不一樣。

更方便的是咱們能夠用在shell中用trap定義咱們本身的信號處理程序

相關文章
相關標籤/搜索