关于sleep函数的疑问

unix 专栏收录该内容
11 篇文章 0 订阅

l



在休眠期间按下SIGQUIT,会立即执行sig_quit函数,返回时不再运行sleep函数剩下的时间,直接运行sleep函数下面的程序。


如果一直不按下SIGQUIT,进程会跑足5秒


推测可能当在sleep运行时触发信号,sig_quit返回并不进入sleep内部,而是直接运行sleep函数的下一个函数。于是做出如下测试。




如果假设正确,在第一个sleep函数期间,按下SIGQUIT,这个sleep函数所引起的休眠不会全部跑完。当sig_quit函数返回时直接运行下面的函数。结果如下


输入SIGQUIRT之后,"caught SIGQUIT"及"---------------------"立刻打印出来,五秒之后打印出"game over"。猜想正确


查看man帮助文档




上图说明了sleep是pause一段时间。



pause的意思就是将进程挂起一段时间,直到有信号接收。

pause函数会挂起呼叫他的那个进程直到有信号发送过来(这个进程中的行为不是包含该信号的捕捉函数就是这个信号能够将进程中止,就是说不是任何一个信号都可以结束pause)。

如果是结束进程,pause不会返回(因为直接结束了,函数不用返回了)

如果是运行信号处理函数,pause会在信号处理函数返回时立即返回。


按照我的理解,上图name那一栏是对于pause这个名词在unix环境中意思的介绍。按照他的介绍,pause的意思就是将进程挂起一段时间直到有信号到来。用这个意思去解释sleep的说明文档进而解释程序中sleep的行为就没有问题了。


问题解决的还是不够完善,还需进一步探究。






















  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值