linuxtrap腳本信號(hao)捕獲命令的使用(yong)
時(shi)間:2019-03-27 來(lai)源:華清(qing)遠見
linux的(de)信(xin)號(hao)(hao)(hao),可以用于進(jin)程(cheng)(cheng)間通(tong)信(xin),還可以用于系(xi)統向進(jin)程(cheng)(cheng)發送(song)命(ming)令。比如(ru)當(dang)系(xi)統關機(ji)的(de)時候,需要通(tong)知每一個(ge)進(jin)程(cheng)(cheng)做(zuo)(zuo)善后(hou)工作(zuo),系(xi)統會(hui)對(dui)每個(ge)進(jin)程(cheng)(cheng)發送(song)SIGTERM信(xin)號(hao)(hao)(hao)。進(jin)程(cheng)(cheng)在收到(dao)信(xin)號(hao)(hao)(hao)之(zhi)后(hou)就(jiu)會(hui)做(zuo)(zuo)一些清理動(dong)作(zuo)。你也可以手動(dong)發送(song)一些信(xin)號(hao)(hao)(hao),比如(ru)“Ctrl+C”會(hui)像指定(ding)的(de)進(jin)程(cheng)(cheng)發送(song)SIGINT信(xin)號(hao)(hao)(hao),如(ru)果進(jin)程(cheng)(cheng)沒(mei)有(you)指定(ding)捕獲信(xin)號(hao)(hao)(hao)動(dong)作(zuo),那就(jiu)默認的(de)動(dong)作(zuo)就(jiu)是掛掉。linux系(xi)統信(xin)號(hao)(hao)(hao)非(fei)常(chang)多,常(chang)見的(de)信(xin)號(hao)(hao)(hao)有(you):

在一個進程中,捕獲(huo)信號需要(yao)用到注(zhu)冊信號函數signal,那么在一個shell腳本中如何去捕獲(huo)信號,并處理(li)信號呢?需要(yao)使用到linux提供的(de)命令trap,trap的(de)用法(fa):
trap cmd sigVALUE
trap 動作 要捕獲的信號
例如:trap “echo ‘I got signal INT’ ” SIGINT
在默認的情況(kuang)下(xia),對shell腳本(ben)發(fa)送Ctrl+C會導致腳本(ben)的退出,如果加(jia)上捕獲命令(ling),則直接(jie)捕獲并(bing)做相應處理,處理動作是由你來(lai)指定的。
接下來(lai)我們寫(xie)幾個例子來(lai)演(yan)示(shi)如何使用(yong)。
例1:捕獲信號(hao)并處(chu)理

結果如下所示:

例(li)2: 還(huan)可以捕獲 shell退出的消息(xi)
trap comand EXIT

結果如下:


