当前位置:   article > 正文

linux sleep()的实现原理

linux sleep原理

http://www.judymax.com/archives/235

sleep()的实现分为三步:

            1.注册一个信号signal(SIGALRM,handler)。接收内核给出的一个信号。

            2.调用alarm()函数。

            3.pause()挂起进程。

 

 

实例代码:

 

#include <stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <unistd.h>

 

 

///时钟编程 alarm()

void wakeUp()

{

      printf("please wakeup!!/n");

}

int main(void) {

      printf("you have 4 s sleep!/n");

 

     signal(SIGALRM,wakeUp);

     alarm(4);

     pause();

 

     printf("good morning!/n");

 

    return EXIT_SUCCESS;

}

 

 

分析:我认为关键的是pause().当执行到这个函数的时候,当前进程被挂起,等时钟alarm函数4秒之后,内核发送一个SIGALRM信号。导致控制从pause函数转到信号的处理函数。信号处理函数中的代码被执行,然后控制返回。当信号被处理完毕之后,pause函数返回,进程继续。

执行结果是:

 

you have 4 s sleep!

please wakeup!!

good morning!

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/225036
推荐阅读
相关标签
  

闽ICP备14008679号