1. 程式人生 > >linux信號解釋(5)--bash下的理解

linux信號解釋(5)--bash下的理解

bash下信號的理解

上一節中用了C語言來理解信號的處理,那麽在bash中是如何理解的呢?

首先我們來認識一下trap命令#type trap
技術分享圖片
o_o原來是一個shell的內建命令,大家能想想為何是內建命令嗎?
sh是人機對話的接口,我們發起的命令都會通過sh與內核進行打交道,那麽在當前sh進程內就能及時完成信號的捕捉和處理。

好了我們回到bash中如何理解呢?我們還是用回上一節的實例來做,創建一個signalshell.sh文件,文件內容如下:

#!/bin/bash
#
echo "Process ID is $$" #$$獲取當前進程的ID,可看到筆者的《sh變量特性(3)默認特性》
#trap的使用格式 trap ‘command;command‘ signal
trap ‘echo "Get a singal -- SIGHUP"‘ SIGHUP
trap ‘echo "Get a singal -- SIGINT"‘ SIGINT
trap ‘echo "Get a singal -- SIGQUIT"‘ SIGQUIT
#寫個死循環來讓進程一直運行,以便捕捉信號
while true
do
        sleep 1
done

保存文檔,並添加可執行權限#chmod u+x signalshell.sh
執行一下#./signalshell.sh
技術分享圖片

同樣想要殺死進程,按ctrl+c已經是不行了,只能發送第9信號,上去就一刀把進程殺死,不給喘氣的機會^_^
技術分享圖片

題外擴展一下:如果寫個循環腳本來ping某個網段,當按下ctrl+c的時候,並不會退出當前進程,而是退出了當前ping,還會循環繼續ping下一個ip。那麽寫腳本可以讓用戶按下ctrl+c的時候就可以退出腳本,而不繼續ping呢?

linux信號解釋(5)--bash下的理解