Unix環境高階程式設計 九 訊號

2021-09-07 16:58:48 字數 2497 閱讀 3487

訊號時軟中斷,很多比較重要的應用程式都需要處理訊號,訊號提供了一種處理非同步事件的方法。每個訊號都乙個名字,以sig開頭,在標頭檔案中定義訊號型別,都是正整數(訊號編號)。

產生訊號的條件:

(1)當使用者按某些終端鍵時,引發終端產生的訊號。

(2)硬體異常產生訊號。

(3)程序呼叫kill函式將訊號傳送給另外乙個程序或程序組。

(4)使用者用kill命令將訊號傳送給其他程序。

(5)檢測到某種軟體條件已經傳送,並將其通知有關程序時候產生訊號。

核心在訊號出現時候處理方式有:(1)忽略此訊號,(2)鋪捉訊號,(3)執行系統預設動作。

unix系統訊號如下:

其中sigkill和sigstop訊號時不能忽略和捕獲的,執行預設動作。

signal

description

sigabrt

由呼叫abort函式產生,程序非正常退出

sigalrm

用alarm函式設定的timer超時或setitimer函式設定的interval timer超時

sigbus

某種特定的硬體異常,通常由記憶體訪問引起

sigcancel

由solaris thread library內部使用,通常不會使用

sigchld

程序terminate或stop的時候,sigchld會傳送給它的父程序。預設情況下該signal會被忽略

sigcont

當被stop的程序恢復執行的時候,自動傳送

sigemt

和實現相關的硬體異常

sigfpe

數學相關的異常,如被0除,浮點溢位,等等

sigfreeze

solaris專用,hiberate或者suspended時候傳送

sighup

傳送給具有terminal的controlling process,當terminal被disconnect時候傳送

sigill

非法指令異常

siginfo

bsd signal。由status key產生,通常是ctrl+t。傳送給所有foreground group的程序

sigint

由interrupt key產生,通常是ctrl+c或者delete。傳送給所有foreground group的程序

sigio

非同步io事件

sigiot

實現相關的硬體異常,一般對應sigabrt

sigkill

無法處理和忽略。中止某個程序

siglwp

由solaris thread libray內部使用

sigpipe

在reader中止之後寫pipe的時候傳送

sigpoll

當某個事件傳送給pollable device的時候傳送

sigprof

setitimer指定的profiling interval timer所產生

sigpwr

和系統相關。和ups相關。

sigquit

輸入quit key的時候(ctrl+/)傳送給所有foreground group的程序

sigse**

非法記憶體訪問

sigstkflt

linux專用,數學協處理器的棧異常

sigstop

中止程序。無法處理和忽略。

sigsys

非法系統呼叫

sigterm

請求中止程序,kill命令預設傳送

sigthaw

solaris專用,從suspend恢復時候傳送

sigtrap

實現相關的硬體異常。一般是除錯異常

sigtstp

suspend key,一般是ctrl+z。傳送給所有foreground group的程序

sigttin

當background group的程序嘗試讀取terminal的時候傳送

sigttou

當background group的程序嘗試寫terminal的時候傳送

sigurg

當out-of-band data接收的時候可能傳送

sigusr1

使用者自定義signal 1

sigusr2

使用者自定義signal 2

si**talrm

setitimer函式設定的virtual interval timer超時的時候

sigwaiting

solaris thread library內部實現專用

sigwinch

當terminal的視窗大小改變的時候,傳送給foreground group的所有程序

sigxcpu

當cpu時間限制超時的時候

sigxfsz

程序超過檔案大小限制

sigxres

solaris專用,程序超過資源限制的時候傳送

unix環境高階程式設計 訊號(2)

函式kill和raise kill函式將訊號傳送給程序或程序組,raise函式則執行程序向自身傳送訊號。kill的pid引數有以下四種不同情況 pid 0,將該訊號傳送給程序id為pid的程序 pid 0,將該訊號傳送給與傳送程序屬於同一程序組的所有程序。pid 0 將該訊號傳送給程序組id等於pi...

訊號概念(UNIX環境高階程式設計筆記)

每個訊號都有乙個名字。這些名字都以3個字元sig開頭。不存在編號為0的訊號。以下條件都可以產生訊號 當使用者按下某些終端鍵時,引發終端產生的訊號。如sigint。硬體異常產生訊號 除數為0 無效的記憶體引用等。程序呼叫kill 2 函式可以將任意訊號傳送給另乙個程序或程序組。接收訊號程序和傳送訊號程...

《unix高階環境程式設計》訊號 訊號傳送與捕獲

kill 函式是將訊號傳送給程序或程序組,raise 函式是將訊號傳送給自身,他們定義及說明如下所示 cpp view plain copy 訊號傳送與捕獲 函式功能 將訊號傳送給程序或程序組 返回值 若成功則返回0,若出錯則返回 1 函式原型 include intkill pid t pid,i...