信號的共性:1. 簡單(開銷小,且在用或者不用的情況下,開銷是一樣的);2. 不能攜帶大量信息(如程序執行過程中,出現段錯誤時, 就會發送一個相關的信號(編號為11)終止該進程的運行);3. 滿足某個特定條件才發送。
信號是信息的載體,Linux/UNIX 環境下,古老、經典的通信方式,現在依然是主要的通信手段。
Unix早期版本就提供了信號機制,但不可靠,信號可能丟失。Berkeley 和 AT&T都對信號模型做了更改,增加了可靠信號機制。但彼此不兼容。POSIX.1對可靠信號例程進行了標準化。
A給B發送信號,B收到信號之前執行自己的代碼,收到信號后,不管執行到程序的什么位置,都要暫停運行,去處理信號,處理完畢再繼續執行。與硬件中斷類似——異步模式。但信號是軟件層面上實現的中斷,早期常被稱為“軟中斷”。信號屬于軟中斷(通過軟件實現);而時鐘中斷屬于硬中斷(由硬件實現),其實現進程占用CPU時間片大小,到時讓出CPU。軟中斷是執行中斷指令產生的,硬中斷由于外設引起。
信號的特質:由于信號是通過軟件方法(執行幾條指令)實現,其實現手段導致信號有很強的延時性。但對于用戶來說,這個延遲時間非常短,不易察覺。對于CPU來說是非常明顯的,因此可能會更改進程之間執行的順序,引起異常(競態條件)。
每個進程收到的所有信號,都是由內核負責發送的,且都是由內核進行處理處理。進程A通過內核向進程B發送信號。