訊號之alarm和pause函式

2022-05-04 20:12:21 字數 1055 閱讀 8554

使用alarm函式可以設定乙個計時器,在將來某個指定的時間,該計時器會超時。當計時器超時時,產生sigalrm訊號。如果不忽略或不捕捉此訊號,則其預設動作是終止呼叫該alarm函式的程序。

#include unsigned 

int alarm( unsigned int

seconds );

返回值:0或以前設定的鬧鐘時間的餘留秒數

其中,引數seconds的值是秒數,經過了指定的seconds秒後會產生訊號sigalrm。要了解的是,經過了指定的秒數後,訊號由核心產生,由於程序排程的延遲,所以程序得到控制從而能夠處理該訊號還需要一些時間。

每個程序只能有乙個鬧鐘時鐘。如果在呼叫alarm時,以前已為該程序設定過鬧鐘時鐘,而且它還沒有超時,則將該鬧鐘時鐘的餘留值作為本次alarm函式呼叫的返回值。以前登記的鬧鐘時鐘則被新值代替。

如果有以前為程序登記的尚未超過的鬧鐘時鐘,而且本次呼叫的seconds值是0,則取消以前的鬧鐘時鐘,其餘留值仍作為alarm函式的返回值

雖然sigalrm的預設動作是終止程序,但是大多數使用鬧鐘的程序會捕捉此訊號。如果此時程序要終止,則在終止之前它可以執行所需的清理操作。如果我們想捕捉sigalrm訊號,則必須在呼叫alarm之前設定該訊號的處理程式。如果我們先呼叫alarm,然後在我們能夠設定sigalrm處理程式之前已經接收到該訊號,那麼程序將終止。

pause函式使呼叫程序掛起直至捕捉到乙個訊號。

#include int pause(void

);返回值:-1,並將errno設定為eintr

只有執行了乙個訊號處理程式並從其返回時,pause才返回。在這種情況下,pause返回-1,並將errno設定為eintr。

注意,在涉及訊號時需要有精細而周到的考慮。

本篇博文內容摘自《unix環境高階程式設計》(第二版),僅作個人學習記錄所用。關於本書可參考:

使用alarm和pause實現sleep的初級認識

又有一段時間沒寫了。今天看到一句話,sleep函式在底層是用alarm和pause實現的 就上網搜了一下,看了好一會兒才明白是怎麼回事。alarm函式其實就是個定時器,每個程序只能維護乙個這樣的定時器。這個函式是有返回值的,通常是0,如果在乙個alarm還沒結束時就呼叫了另乙個alarm,那麼第二個...

訊號之可靠訊號術語和語義

當引發訊號的事件發生時,為程序產生乙個訊號 或向程序傳送乙個訊號 事件可以是硬體異常 軟體條件 終端產生的訊號或呼叫kill函式。在產生了訊號時,核心通常在程序表中設定乙個某種形式的標誌。當對訊號採取了這種動作時,我們說向程序遞送了乙個訊號。在訊號產生 generation 和遞送 delivery...

python之zip函式和sorted函式

zip 函式和sorted 函式 zip 函式 將兩個序列合併,返回zip物件,可強制轉換為列表或字典 sorted 函式 對序列進行排序,返回乙個排序後的新列表,原資料不改變 合併兩個列表,以列表型別輸出 list str a b c d list num 1,2,3,4 list new zip...