1. 程式人生 > >訊號(signal)

訊號(signal)

訊號本質

  訊號是軟體中斷,是在軟體層次上對中斷的一種模擬

訊號產生(來源)

1.硬體來源:比如我們按下了鍵盤或者其它硬體故障;

2.軟體來源:最常用傳送訊號的系統函式是kill, raise, alarm和pause;

訊號遞送

  當導致產生訊號的事件發生時,核心就產生一個訊號。訊號產生後,核心通常會在程序表設定某種形式的標誌,當核心設定了這個標誌,我們就說核心向一個程序遞送了一個訊號。

訊號未決

  訊號產生和遞送之間的時間間隔稱為訊號未決。

訊號排隊

  每個程序有一個訊號遮蔽字,用它來選擇阻塞某些訊號(unix提供sigprocmask函式可以獲得和更改遮蔽字),對於被阻塞的訊號,如果程序對該訊號的動作是捕捉或系統預設

(即不是忽略),則核心將為該訊號保持為未決狀態,直到該訊號解除阻塞或將對該訊號的動作更改為忽略。在這之前,如果這種訊號發生了多次,則發生未決訊號排隊

不可靠訊號與可靠訊號

不可靠訊號

早期unix系統的訊號為不可靠訊號,它們有下面兩點特性(問題):

1.程序對某種訊號的處理方式進行設定後(signal函式),第一次接收到這種訊號,程序按所設定的方式處理,在這之後,這種訊號的處理方式就會被重置為系統預設值

2.訊號可能會丟失:對於阻塞訊號,不發生未決訊號排隊,訊號阻塞解除後,僅