linux信號解釋(5)--bash下的理解
阿新 • • 發佈:2018-03-06
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下的理解