关于sleep函数的疑问

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值