
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;
}