當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > linuxtrap腳本信號(hào)捕獲命令的使用
linux的信號(hào),可以用于進(jìn)程間通信,還可以用于系統(tǒng)向進(jìn)程發(fā)送命令。比如當(dāng)系統(tǒng)關(guān)機(jī)的時(shí)候,需要通知每一個(gè)進(jìn)程做善后工作,系統(tǒng)會(huì)對(duì)每個(gè)進(jìn)程發(fā)送SIGTERM信號(hào)。進(jìn)程在收到信號(hào)之后就會(huì)做一些清理動(dòng)作。你也可以手動(dòng)發(fā)送一些信號(hào),比如“Ctrl+C”會(huì)像指定的進(jìn)程發(fā)送SIGINT信號(hào),如果進(jìn)程沒有指定捕獲信號(hào)動(dòng)作,那就默認(rèn)的動(dòng)作就是掛掉。linux系統(tǒng)信號(hào)非常多,常見的信號(hào)有:
在一個(gè)進(jìn)程中,捕獲信號(hào)需要用到注冊(cè)信號(hào)函數(shù)signal,那么在一個(gè)shell腳本中如何去捕獲信號(hào),并處理信號(hào)呢?需要使用到linux提供的命令trap,trap的用法:
trap cmd sigVALUE
trap 動(dòng)作 要捕獲的信號(hào)
例如:trap “echo ‘I got signal INT’ ” SIGINT
在默認(rèn)的情況下,對(duì)shell腳本發(fā)送Ctrl+C會(huì)導(dǎo)致腳本的退出,如果加上捕獲命令,則直接捕獲并做相應(yīng)處理,處理動(dòng)作是由你來(lái)指定的。
接下來(lái)我們寫幾個(gè)例子來(lái)演示如何使用。
例1:捕獲信號(hào)并處理
結(jié)果如下所示:
例2: 還可以捕獲 shell退出的消息
trap comand EXIT
結(jié)果如下: