Linux程序訊號詳解

2021-09-22 02:13:43 字數 1326 閱讀 5699

1. ⽤使用者輸⼊入命令,在shell下啟動⼀乙個前台程序。

2. ⽤使用者按下ctrl-c,這個鍵盤輸⼊入產⽣生⼀乙個硬體中斷。

3. 如果cpu當前正在執⾏行這個程序的**,則該程序的⽤使用者空間**暫停執⾏行,cpu從⽤使用者態 切換到內

核態處理硬體中斷。

4. 終端驅動程式將ctrl-c解釋成⼀乙個sigint訊號,記在該程序的pcb中(也可以說傳送了⼀一 個sigint

訊號給該程序)。

5. 當某個時刻要從核心返回到該程序的⽤使用者空間**繼續執⾏行之前,⾸首先處理pcb中記錄的訊號,發現

有⼀乙個sigint訊號待處理,⽽而這個訊號的預設處理動作是終⽌止程序,所以直接終⽌止程序⽽而不再返回它

的⽤使用者空間**執⾏行

1. ctrl-c產⽣生的訊號只能發給前台程序。⼀乙個命令 後⾯面加個&可以放到後台運⾏行,這樣shell不必等待進

程結束就可以接受新的命令,啟動新的程序。

2. shell可以同時運⾏行⼀乙個前台程序和任意多個後台程序,只有前台程序才能接到像ctrl-c這種控制鍵

產⽣生的訊號。

3. 前台程序在運⾏行過程中⽤使用者隨時可能按下ctrl-c⽽而產⽣生⼀乙個訊號,也就是說該程序的⽤使用者空間**執

⾏行到任何地⽅方都有可能收到sigint訊號⽽而終⽌止,所以訊號相對於程序的控制流程來說是非同步

(asynchronous)的。

. ⽤使用者在終端按下某些鍵時,終端驅動程式會傳送訊號給前台程序,例如ctrl-c產⽣生sigint信 號,ctrl-

\產⽣生sigquit訊號,ctrl-z產⽣生sigtstp訊號(可使前台程序停⽌止,這個訊號將 在 後⾯面課程詳細解

釋)。2. 硬體異常產⽣生訊號,這些條件由硬體檢測到並通知核心,然後核心向當前程序傳送適當的信 號。例如

當前程序執⾏行了除以0的指令,cpu的運算單元會產⽣生異常,核心將這個異常解釋 為sigfpe訊號發

送給程序。再⽐比如當前程序訪問了⾮非法記憶體位址,,mmu會產⽣生異常,核心 將這個異常解釋為

sigse**訊號傳送給程序。

3. ⼀乙個程序調⽤用kill(2)函式可以傳送訊號給另⼀乙個程序。 可以⽤用kill(1)命令傳送訊號給某個程序,kill(1)

命令也是調⽤用kill(2)函式實現的,如果不明確指定訊號則傳送sigterm訊號,該訊號的預設處理動作

是終⽌止程序。 當核心檢測到某種軟體條件發⽣生時也可以通過訊號通知程序,例如鬧鐘超時產⽣生

sigalrm訊號,向讀端已關閉的管道寫資料時產⽣生sigpipe訊號。 如果不想按預設動作處理訊號,

⽤使用者程式可以調⽤用sigaction(2)函式告訴核心如何處理某種訊號.

4. 軟體條件產⽣

Linux 程序訊號

概念 訊號是程序之間事件非同步通知的一種方式,屬於軟中斷。訊號處理常見方式 忽略此訊號。執行該訊號的預設處理動作。提供乙個訊號處理函式,要求核心在處理該訊號時切換到使用者態執行這個處理函式,這種方式稱為捕捉 catch 乙個訊號。產生訊號 捕捉訊號 核心如何實現訊號的捕捉 如果訊號的處理動作是使用者...

Linux程序訊號

訊號是乙個軟體中斷。作業系統通過訊號告訴程序發生了某個事件,打斷程序當前的操作,去處理這個事件。1.訊號的檢視kill l 檢視系統中的訊號種類在linux作業系統中,一共有62中訊號。34 64號訊號 後期擴充的,因為沒有具體對應事件,因此命名比較草率 可靠訊號。訊號的生命週期 產生 在程序中註冊...

linux 程序訊號

signal 函式的使用方法簡單,但並不屬於 posix 標準,在各類 unix 平台上的實現不盡相同,因此其用途受 到了一定的限制。而 posix 標準定義的訊號處理介面是 sigaction 函式,其介面標頭檔案及原型如下 include int sigaction int signum,con...