alarm()函數

alarm函數

要注意的是,一個進程只能有一個鬧鐘時間,如果在調用alarm之前已設置過鬧鐘時間,則任何以前的鬧鐘時間都被新值所代替。需要注意的是,經過指定的秒數后,信號由內核產生,由于進程調度的延遲,所以進程得到控制從而能void handle(int sig)夠處理該信號還需要一些時間。

{

if (14 == sig)

{

printf("catched signal SIGALRM\n");

}

}

int main(void)

{

signal(14, handle);

//SIGALRM默認處理動作是結束進程

//可以通過signal來自定義該信號的處理動作

alarm(5);

//若alarm設定鬧鐘之后,有一個優(yōu)先級更高

//的進程B需要運行,則系統(tǒng)優(yōu)先運行B

//若進程B運行時間超過了設定的鬧鐘時間

//則在調用pause函數之前信號就已發(fā)出并且

//對其進行了處理,

//從而導致pause之后沒有信號來喚醒該進程

//則該進程一直沉睡

pause();

printf("alarm...wake up\n");

return 0;

}

如果有以前為進程登記的尚未超時的鬧鐘時鐘,而且本次調用的seconds值是0,則取消以前的鬧鐘時鐘,其余留值仍作為alarm函數的返回值。

////////////////////////////////////////////////////////////////////////五秒后結束,不會執(zhí)行下面的內容;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////函數說明:alarm()用來設置信號SIGALRM 在經過參數seconds 指定的秒數后傳送給目前的進程. 如果參數seconds 為0, 則之前設置的鬧鐘會被取消, 并將剩下的時間返回.

返回值:返回之前鬧鐘的剩余秒數, 如果之前未設鬧鐘則返回0.






void handle(int sig)

{

if (14 == sig)

{

printf("catched signal SIGALRM\n");

}

}

int main(void)

{

signal(14, handle);

//SIGALRM默認處理動作是結束進程

//可以通過signal來自定義該信號的處理動作

alarm(5);

//若alarm設定鬧鐘之后,有一個優(yōu)先級更高

//的進程B需要運行,則系統(tǒng)優(yōu)先運行B

//若進程B運行時間超過了設定的鬧鐘時間

//則在調用pause函數之前信號就已發(fā)出并且

//對其進行了處理,

//從而導致pause之后沒有信號來喚醒該進程

//則該進程一直沉睡

pause();

printf("alarm...wake up\n");

return 0;

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 進程間的通信主要分為本機器進程間的通信和不同機器間進程的通信。本文主要描述本機進程間的通信。 一、傳統(tǒng)Linux的...
    一葉之界閱讀 496評論 0 2
  • 進程之間可以通過信號傳遞信息,信號是一種軟中斷機制,通過信號用來通知進程發(fā)生了異步事件。進程之間可以互相通過系統(tǒng)調...
    lintong閱讀 456評論 0 2
  • 昨天晚上讀完了《傲慢與偏見》,感觸頗深,遂決定寫下讀后感,以便整理一下自己的思路。 先對女主角伊麗莎白進行分析:伊...
    佳盈閱讀 970評論 2 2
  • 北京三沐麗人
    雅欣互聯(lián)網閱讀 244評論 0 0
  • 最近我在讀清代醫(yī)學大家王孟英的食療專著《隨息居飲食譜》,全書將飲食分為水飲、谷食、調和、蔬食、果食、毛羽、鱗介等七...
    茜喵閱讀 8,551評論 54 213

友情鏈接更多精彩內容