linux初學之信號及信號的簡介

     一、定義:信號是處理異步事件發生的。

     信號擁有自己的名字,均以SIG開頭。它們在頭文件中被定義爲一個正整數,這些正整數被稱爲信號編號(signal number)。

     信號數量很多,各有用途。有6個信號被稱爲作業控制信號,它們是SIGCHLE,SIGCONT,SIGSTOP, SIGTSTP, SIGTTIN 和SIGTTOU。這6個信號有一個共同的特點,即都是用以協調和組織各進程運行的,也就是用於實現所謂作業控制的。在通常情況下,用戶不需要對它們進行處理,Shell會自動完成對這些信號的處理工作,作業信號之間互相影響,當進程接收到SIGCONT信號時,被系統懸掛的SIGSTOP,SIGTSTP,SIGTTIN和SIGTTOU信號都將丟失;同樣的當進程接收到SIGSTOP,SIGTSTP,SIGTTIN和SIGTTOU信號中的任意一個,被懸掛的SIGCONT信號將丟失。

     二、信號是處理異步事件發生的,在一個進程執行過程中,如果有信號被髮送到該進程,則該進程將按預先設定的處理辦法進行相應的處理。處理辦法可分爲下列2種:

  1.             捕捉信號。當某個信號被髮送到一個正在執行的進程時,該進程將對該信號註冊一個處理函數,以完成所需處理。一旦收到此信號,則通知系統調用相應的信號處理函數,對於每一個信號,系統都有相應的處理函數(通常爲終止進程),可以設定進程在信號發生時使用默認的函數處理。

  2.            忽略信號。不希望進程被中止,不對信號進行任何處理。

    三、有兩個信號是應用程序無法捕捉和忽略的,他們時SIGKILL 和SIGSTOP。這是爲了使系統管理員在任何時候能中斷或結束某一特定的進程。

         

                                                                   信號的使用

     信號是一種進程間通信的機制,最大特點是異步,表示進程在任何時刻都有可能接收到信號。信號通常是用於要求進程打斷常規的運行而處理來另一些事件。

     一個最常見的用途是在錯誤發生時通知進程結束。在對信號的說明中已經看到,對於許多錯誤,如總線錯誤,浮點運算錯誤,調用內存錯誤等錯誤都有相應的信號通知進程。此外,信號還有許多其他用途。

     如要運行一個大型科學計算程序,在程序運行過程中,希望能隨時瞭解程序運行的狀態,可以使用兩種不同的方法。一是在程序的循環體中加一些判斷,輸出之類的語句。這種方法會使代碼增加,儘管一次操作的時間不長,但當程序要循環很多次的時候,其耗費也是很可觀的。另一種方法是每隔一段時間由系統向該程序發送一個信號,進程捕捉該信號之後調用信號處理函數,展示當前狀態參數,而程序本身將繼續運行。和前一種方法相比,用信號處理所需時間更短且更高效,這在運行大型程序時是非常有益的。又如在串口通信中所使用的握手信號等都是信號的具體使用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章