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信号以前的处理动作。
外附一张图哈:(很重要哦)
比较短小,欢迎来访哦~~
看看代码哦:
运行结果:
结果中每隔三秒钟,打印一条语句。实现了sleep(3)的功能。
关于sleep函数,在这里,我们首先让主函数调用了my_sleep函数,my_sleep函数又调用了注册处理函数,注册了一个SIGALRM的信号;然后为其设置闹钟,看主函数中的my_sleep函数要睡眠多长时间,调用pause等待,那么什么时候处理信号呢?此时,在用户态由于接收到的信号将其保存起来,使其处于未决状态,进入内核态处理异常,再回到用户态执行SIGALRM信号处理函数,信号处理函数返回时执行特殊的系统调用再次进入内核,处理完异常回用户态,从中断的吓一条指令开始执行。当捕捉到信号之后pause返回-1,再调用alarm(0)清空闹钟,调用sigaction恢复SIGALRM信号以前的处理动作。
外附一张图哈:(很重要哦)
比较短小,欢迎来访哦~~
相关文章推荐
- 用户态驱动程序和核心态驱动程序
- 操作系统学习总结一
- 系统调用,上下文切换及中断概念的汇总
- 【初探】操作系统之进程线程
- 内核态到用户态切换分析(一)
- 内核态和用户态通讯知识收集
- 例说linux内核与应用数据通信(一):添加一个系统调用
- 例说linux内核与应用数据通信(二):proc虚拟文件系统
- 例说linux内核与应用数据通信(三):读写内核设备驱动文件
- 例说linux内核与应用数据通信(四):映射设备内核空间到用户态
- 例说linux内核与应用数据通信系列
- 【操作系统】用户态与内核态的区别转换
- 内核态和用户态
- Linux用户空间和内核空间详解
- 用户态和内核态
- 操作系统精髓与设计原理-进程描述和控制
- Lwip内存管理
- 记一次修改linux系统语言
- linux socket常用配置
- CentOS6.7搭建蜜罐dionaea