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()是可被中斷的暫停;



