文章目錄
- 1.信號的概念
- 2.通過Ctrl c分析信號
- 2.1Ctrl c的作用
- 2.2 signal介面
- 2.3證明ctrl +c本質是信號
- 2.4總結
- 3.信號處理的常見方式
- 4.信號的產生方式
- 4.1通過終端按鍵產生
- 4.2呼叫系統函式向行程發送信號
- 4.3.1呼叫kill
- 4.3.2呼叫rasize
- 4.3.2.1使用演示
- 4.3.2.2linux中9號信號不能被捕捉
- 4.3.3呼叫abort
- 4.3軟體條件產生信號
- 4.3.1使用演示
- 4.3.2 利用alarm驗證IO對效率的影響
- 4.4硬體例外產生信號
- 4.5總結
1.信號的概念
信號是行程之間事件異步的一種方式,屬于軟中斷,一個行程在收到信號之前,就已經知道,當接收到信號時應該怎么去做,
就好比行人相對于紅綠紅,在看到紅綠燈之前就已經知道紅燈停、綠燈行,

2.通過Ctrl c分析信號
2.1Ctrl c的作用
Ctrl +c 是通過硬體的輸入方式中斷行程,它的本質也是通過系統向行程發送信號,
在證明Ctrl c本質之前需要知曉Ctrl c的本質是往前臺發送資訊,在一次會話中只允許打開一個前臺行程,
2.2 signal介面
signal的介面是捕獲信號,對信號進行重定義
捕捉到了信號才會觸發這個函式

2.3證明ctrl +c本質是信號


2.4總結
1.Ctrl c只能給前臺發送信號給前臺行程,一個命令后面加&表示放到后臺運行,這樣shell不必等待行程結束就可以接收新的命令,啟動新行程
當行程被設定為后臺行程時,我們在命令列輸入的訊息流會和后臺行程的資訊混合在一起,這是因為bash行程是在前臺的,我們可以輸入資訊,但是顯示幕只有一個,被兩個行程同時使用,說明他是臨界資源,而這個臨界資源又沒有被保護,因此它的資料會發生混亂

2.Shell可以同時運行一個前臺行程和多個后臺行程,只有前臺行程才能接收到鍵盤輸入的組合鍵信號
3.前臺行程可以隨時接收一個組合鍵信號,證明了行程相對于信號是異步的
3.信號處理的常見方式
1.忽略信號
2.指向該信號的默認處理動作
3.捕捉信號,類似上面的捕捉2號信號,要求內核在處理該信號時切換到用戶狀態下執行
信號產生的時候,并不是被立即處理的,信號產生和新處理的中間有一個時間視窗,有一個信號的記錄(信號產生,信號保存,信號生命周期結束)
4.信號的產生方式
4.1通過終端按鍵產生
前面已經介紹
4.2呼叫系統函式向行程發送信號
4.3.1呼叫kill
kill命令是呼叫kill函式介面豎向的,kill可以給一個指定的行程發送指定的信號,呼叫成功回傳0,失敗回傳-1



4.3.2呼叫rasize
4.3.2.1使用演示
rasie可以給當前行程發送指定的信號(自己給自己發送信號),呼叫成功回傳0,失敗-1


4.3.2.2linux中9號信號不能被捕捉
這么多信號肯定要有信號不能被捕捉,因為如果都可以被捕捉,病毒可以將所有信號捕捉更改掉,系統就癱瘓了,因此需要一個信號不能被捕捉,即系統始終擁有對行程的終止能力

4.3.3呼叫abort
abort使當前行程收到信號而例外終止,給自己發生6號信號


4.3軟體條件產生信號
4.3.1使用演示



4.3.2 利用alarm驗證IO對效率的影響

4.4硬體例外產生信號
硬體的例外被檢測到,并且通知OS,OS會向當前行程發送適當的信號


4.5總結
1、9號信號不能被捕捉
2、所有的信號都需要經過OS發出,因為發送信號是指揮信號干什么,只有管理者才有這個能力,所以所有信號的發出需要經過OS
3、上面介紹的是,信號的觸發條件
4、如何表示收到信號:在行程的PCB中保存一張位圖,1表示收到信號,0表示沒有收到
5、如何表示發送信號:OS發信號只需在PCB中找到位圖,將對應的位元位改為1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/274509.html
標籤:其他
