alarm(time);執行之后告訴內核,讓內核在time秒時間之后向該進程發送一個定時信號,然后該進程捕獲該信號並處理;
pause()函數使該進程暫停讓出CPU,但是該函數的暫停和前面的那個sleep函數的睡眠都是可被中斷的睡眠,也就是說收到了中斷信號之后再
重新執行該進程的時候就直接執行pause()和sleep()函數之后的語句;
下面是一個定時2秒的實例:
/************************************************************************* > File Name: alarm.c > Author: > Mail: > Created Time: 2015年11月20日 星期五 21時12分52秒 ************************************************************************/ #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秒;實例如下:
/************************************************************************* > File Name: alarm.c > Author: > Mail: > Created Time: 2015年11月20日 星期五 21時12分52秒 ************************************************************************/ #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()是可被中斷的暫停;