linux中alarm函式和pause函式詳解例項
阿新 • • 發佈:2018-11-11
轉載原文:https://www.cnblogs.com/yxk529188712/p/4982401.html
alarm(time);執行之後告訴核心,讓核心在time秒時間之後向該程序傳送一個定時訊號,然後該程序捕獲該訊號並處理;
pause()函式使該程序暫停讓出CPU,但是該函式的暫停和前面的那個sleep函式的睡眠都是可被中斷的睡眠,也就是說收到了中斷訊號之後再
重新執行該程序的時候就直接執行pause()和sleep()函式之後的語句;
下面是一個定時2秒的例項:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> void sig_handler(int num) { printf("receive the signal %d.\n", num); } int main() { signal(SIGALRM, sig_handler); alarm(2); while(1){ pause(); printf("pause is over.\n"); } exit(0); }
如果我們想程式每2秒都定時一下,這樣實現也很簡單,我們在處理定時訊號的函式中再次定時2秒;例項如下:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> void sig_handler(int num) { printf("receive the signal %d.\n", num); alarm(2); } int main() { signal(SIGALRM, sig_handler); alarm(2); while(1){ pause(); printf("pause is over.\n"); } exit(0); }
可以看出程式每隔2秒就會收到訊號14,也就是SIGALRM訊號;
並且當處理完該訊號之後,直接執行pause()函式下面的語句;說明pause()是可被中斷的暫停;