-
SIGALRM
鎖定
- 中文名
- SIGALRM
- 外文名
- SIGALRM
- 學 科
- 計算機科學
- 描 述
- 定時器信號
SIGALRM簡介
在不同的平台上,信號的編號可能發生變化,因此需要使用符號名稱。
SIGALRM語源
SIG是信號名的通用前綴。
ALRM是alarm的縮寫,即定時器。
SIGALRM使用
計算機程序通常使用SIGALRM作為長時間操作的超時信號,或提供一種隔一定時間間隔處理某些操作的方式。
SIGALRM通常在調用alarm(3)系統調用的整數秒之後產生。有時它被作為sleep(3)的實現;因此,不能保證可以用alarm(3)在sleep(3)調用進行中喚醒程序。
linux中的SIGALRM信號和SIGCHID信號
在進行阻塞式系統調用時,為避免進程陷入無限期的等待,可以為這些阻塞式系統調用設置定時器。Linux提供了alarm系統調用和SIGALRM信號實現這個功能。
要使用定時器,首先要安裝SIGALRM信號。如果不安裝SIGALRM信號,則進程收到SIGALRM信號後,缺省的動作就是終止當前進程。SIGALRM信號安裝成功後,在什麼情況下進程會收到該信號呢?這就要依賴於Linux提供的定時器功能。在Linux系統下,每個進程都有惟一的一個定時器,該定時器提供了以秒為單位的定時功能。在定時器設置的超時時間到達後,調用alarm的進程將收到SIGALRM信號。alarm系統調用的原型為:
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
參數説明:
1)seconds:要設定的定時時間,以秒為單位。在alarm調用成功後開始計時,超過該時間將觸發SIGALRM信號。
返回值:
返回當前進程以前設置的定時器剩餘秒數。
SIGALRM舉例
#include <stdio.h> #include <signal.h> //全局計數器變量 int Cnt=0; //SIGALRM信號處理函數 void CbSigAlrm(int signo) { //輸出定時提示信息 printf(" seconds: %d",++Cnt); printf("\r"); //重新啓動定時器,實現1秒定時 alarm(1); } void main() { //安裝SIGALRM信號 if(signal(SIGALRM,CbSigAlrm)==SIG_ERR) { perror("signal"); return; } //關閉標準輸出的行緩存模式 setbuf(stdout,NULL); //啓動定時器 alarm(1); //進程進入無限循環,只能手動終止 while(1) { //暫停,等待信號 pause(); } }
- 參考資料
-
- 1. linux中的兩個非常重要的信號:SIGALRM信號和SIGCHID信號 .CSDN[引用日期2018-07-28]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:4次歷史版本
- 最近更新: 格斗天王2046