很多疑惑看看man手册就清楚了:
DESCRIPTION
sleep() makes the calling thread sleep until X seconds have elapsed or a signal arrives which is not ignored.
描述:
sleep使线程沉睡,直到X秒——或者有一个未被忽略的信号到达。
而sleep本身也是通过ALRM信号发挥作用的。
BUGS
sleep() may be implemented using SIGALRM; mixing calls to alarm(2) and sleep() is a bad idea.
Using longjmp(3) from a signal handler or modifying the handling of SIGALRM while sleeping will cause undefined results.
漏洞:
sllep函数可能是用SIGALRM来实现的,混合调用alarm和sleep可不是个好主意。
在sleep期间修改SIGALRM的处理会导致未知错误。。
总结
这样一来整个项目中都不能随便使用alarm函数了,因为你不知道哪个草丛里会冒出来一个sleep();
那么如何保持sleep不被打断呢?这个方法[https://blog.youkuaiyun.com/cjsycyl/article/details/22667023]
很原始,但有效。