您的位置:首页 > 运维架构 > Linux

linux之睡眠函数(my_sleep)

2016-07-15 11:13 465 查看
我们在程序中,很多次用到sleep()函数,让它睡眠几秒后再执行该进程。今天呢,我要给大家实现一下sleep函数。

看看代码哦:



运行结果:



结果中每隔三秒钟,打印一条语句。实现了sleep(3)的功能。

关于sleep函数,在这里,我们首先让主函数调用了my_sleep函数,my_sleep函数又调用了注册处理函数,注册了一个SIGALRM的信号;然后为其设置闹钟,看主函数中的my_sleep函数要睡眠多长时间,调用pause等待,那么什么时候处理信号呢?此时,在用户态由于接收到的信号将其保存起来,使其处于未决状态,进入内核态处理异常,再回到用户态执行SIGALRM信号处理函数,信号处理函数返回时执行特殊的系统调用再次进入内核,处理完异常回用户态,从中断的吓一条指令开始执行。当捕捉到信号之后pause返回-1,再调用alarm(0)清空闹钟,调用sigaction恢复SIGALRM信号以前的处理动作。

外附一张图哈:(很重要哦)






比较短小,欢迎来访哦~~


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息