signal和sigaction的分析比較

2021-05-23 11:33:31 字數 897 閱讀 9573

signal函式每次設定具體的訊號處理函式(非sig_ign)只能生效一次,每次在程序響應處理訊號時,隨即將訊號處理函式恢復為預設處理方式.所以如果想多次相同方式處理某個訊號,通常的做法是,在響應函式開始,再次呼叫signal設定,如下圖:

int sig_int();

//my signal handler..

.signal

(sigint

, sig_int);.

..int sig_int(

)

這種**段的乙個問題是:在訊號發生之後到訊號處理程式中呼叫s i g n a l函式之間有乙個

時間視窗。在此段時間中,可能發生另一次中斷訊號。第二個訊號會造成執行預設動作,而對

中斷訊號則是終止該程序。這種型別的程式段在大多數情況下會正常工作,使得我們認為它們

正確,而實際上卻並不是如此。

另乙個問題是:在程序不希望某種訊號發生時,它不能關閉該訊號。

sigaction:

1.在訊號處理程式被呼叫時,系統建立的新訊號遮蔽字會自動包括正被遞送的訊號。因此保證了在處理乙個

給定的訊號時,如果這種訊號再次發生,那麼它會被阻塞到對前乙個訊號的處理結束為止

2.響應函式設定後就一直有效,不會重置

3.對除s i g a l r m以外的所有訊號都企圖設定s a _ r e s ta rt標誌,於是被這些訊號中斷

的系統呼叫(read,write)都能自動再起動。不希望再起動由s i g a l r m訊號中斷的系統呼叫的原因是希望對i / o操作可以設定時間限制。

所以希望能用相同方式處理訊號的多次出現,最好用sigaction.訊號只出現並處理一次,可以用signal

訊號處理 signal和sigaction的區別

下面所指的signal都是指以前的older signal函式,現在大多系統都用sigaction重新實現了signal函式 1 signal在呼叫handler之前先把訊號的handler指標恢復 sigaction呼叫之後不會恢復handler指標,直到再次呼叫sigaction修改handle...

signal函式和sigaction結構體理解

signal函式和sigaction結構體理解 一,signal函式 詳細介紹 include include include sig ign忽略 sig dfl預設,這倆巨集也可以作為訊號處理函式。同時sigstop sigkill這倆訊號無法捕獲和忽略。注意,經過實驗發現,signal函式也會堵...

iOS Mach異常和signal訊號

1.ios mach異常 1.1 xnu darwin是mac os和ios的作業系統,而xnu是darwin作業系統的核心部分。xnu是混合核心,兼具單核心和微核心的特性,而mach即為其微核心。darwin作業系統和macos ios系統版本號的對應如上圖所示,mac可執行下述命令檢視darwi...