linux的信號,可以用于進程間通信,還可以用于系統向進程發送命令。比如當系統關機的時候,需要通知每一個進程做善后工作,系統會對每個進程發送SIGTERM信號。進程在收到信號之后就會做一些清理動作。你也可以手動發送一些信號,比如“Ctrl+C”會像指定的進程發送SIGINT信號,如果進程沒有指定捕獲信號動作,那就默認的動作就是掛掉。linux系統信號非常多,常見的信號有:
在一個進程中,捕獲信號需要用到注冊信號函數signal,那么在一個shell腳本中如何去捕獲信號,并處理信號呢?需要使用到linux提供的命令trap,trap的用法:
trap cmd sigVALUE
trap 動作 要捕獲的信號
例如:trap “echo ‘I got signal INT’ ” SIGINT
在默認的情況下,對shell腳本發送Ctrl+C會導致腳本的退出,如果加上捕獲命令,則直接捕獲并做相應處理,處理動作是由你來指定的。
接下來我們寫幾個例子來演示如何使用。
例1:捕獲信號并處理
結果如下所示:
例2: 還可以捕獲 shell退出的消息
trap comand EXIT
結果如下: