sleep()的实现原理

sleep()的实现分为三步:

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

            2.调用alarm()函数。

            3.pause()挂起进程。

 

 

实例代码:

#include

#include

#include

#include

 

 

///时钟编程 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!

你可能感兴趣的:(linux)