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

posted on 2015-11-20 21:30  Linux-ever  阅读(16288)  评论(0编辑  收藏  举报