書-Linux命令行與shell腳本編程大全(第3版)
●處理信號
○生成訊號
●捕獲信號
○捕獲信號-退出
●捕獲信號-修改、移除
處理信號
目前控制腳本就只能在命令列中,但是也可以用訊號的方式去控制腳本停止、啟動、終止。
Linux總共有30種訊號,但是下面只會列出常見的訊號。
生成訊號
1.中斷進程
原本要等100秒,但是按下Ctrl + C之後會生成'SIGINT'訊號給當前在shell中所有進程。
按鍵: Ctrl + C
2.暫停進程(之後講播放)
就跟播影片一樣按下暫停之後還可以播放,按下entry後就會傳送'SIGSTOP'訊號暫停。
按鍵: Ctrl + Z
可以查看目前進程有那些東西在運行,第二行顯示T要麼被追蹤,暫停。
指令: ps -l
你要離開他還會提醒你,輸入兩次就可以離開,但是我們可以用kill的方式來殺掉進程。
指令: exit
輸入進程的PID就可以殺掉了,當我們按下entry就會發送'SIGKILL'信號終止。
指令: kill -9 1977
捕獲信號
只要trap就可捕獲到你所要捕獲的訊號。
在程式結束前,只要我按下Ctril +C就會執行trap那一行。
每次使用Ctrl + C都會執行trap中echo語句,而不是終止該腳本。
捕獲信號-退出
程式執行完,或是終止腳本都會觸發。
等他執行完捕獲到EXIT,雖說按下Ctrl + C會傳送SIGINT,但是退出前還是捕獲到EXIT。
捕獲信號-修改、移除
這個腳本就是會依據最新的trap中echo語句。
更改所輸出echo可以再打一次trap。
加上破折號可以讓SIGINT恢復預設動作。
可以看到第二次迴圈按下Ctrl + C就離開了。