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!