码迷,mamicode.com
首页 > 系统相关 > 详细

linux中alarm函数和pause函数详解实例

时间:2015-11-20 23:06:36      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:

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

技术分享

技术分享

技术分享

linux中alarm函数和pause函数详解实例

标签:

原文地址:http://www.cnblogs.com/yxk529188712/p/4982401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!