十一、指令碼控制與計劃任務
阿新 • • 發佈:2020-08-20
訊號
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]+ 已停止 sleep100
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 CMD4 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訊號名
#待補充