1. 程式人生 > 實用技巧 >十一、指令碼控制與計劃任務

十一、指令碼控制與計劃任務

訊號

Linux利用訊號與執行在系統中的程序進行通訊。

可以編寫指令碼使其收到特定訊號時執行某些命令,從而控制shell指令碼的操作。

linux常見訊號

訊號 描述
1 SIGHUP 掛起程序
2 SIGINT 終止程序
3 SIGQUIT 停止程序
9 SIGKILL 強制終止程序
15 SIGTERM 正常終止程序
17 SIGSTOP 強制停止程序
18 SIGTSTP 停止或暫停程序
19 SIGCONT 繼續執行停止的程序

預設情況下bash shell會忽略收到的3,15訊號,這樣使互動式shell不會意外終止。

bash shell會接收1,2訊號,如離開一個互動式shell之前,shell會把1訊號即掛起訊號傳給所有由該shell啟動的程序。

通過2訊號,中斷shell,Linux核心會停止為shell分配CPU處理時間,同樣shell會把該訊號傳給由他啟動的程序。

生成訊號

linux使用鍵盤組合鍵生成停止或暫停兩種基本訊號

中斷程序

ctrl+c生成2訊號,終止程序

[root@tzPC ~]# sleep 100
^C

暫停程序

ctrl+z生成18訊號,停止shell中執行的程序,停止程序會讓程式繼續儲存在記憶體中並能從上次暫停的位置繼續執行。

[1]是shell分配的作業號,shell把執行中的每個程序稱為作業併為其分配唯一的作業號

[root@tzPC ~]# sleep 100
^Z
[1]+  已停止               sleep
100

jobs檢視後臺停止的程序

[root@tzPC ~]# jobs
[1]+  已停止               sleep 100

將後臺停止的程序恢復到前臺執行

[root@tzPC ~]# fg 1

如果shell會話中有一個已停止的作業再退出shell時bash會提醒你

[root@tzPC ~]# sleep 100
^Z
[1]+  已停止               sleep 100
[root@tzPC ~]# exit
exit
有停止的任務。

使用ps -l檢視已停止的作業

[root@tzPC ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S 0 89099 89094 0 80 0 - 28912 do_wai pts/0 00:00:00 bash 0 T 0 91144 89099 0 80 0 - 26976 do_sig pts/0 00:00:00 sleep 0 R 0 91231 89099 0 80 0 - 37235 - pts/0 00:00:00 ps

知道了已停止作業的PID,可以使用kill命令傳送SIGKILL訊號終止他

[root@tzPC ~]# kill -9 91144

捕獲訊號

trap命令

捕獲訊號並執行其他命令

語法格式

trap commands signals

signals可以是數值或linux訊號名

#待補充