运行系统:ubuntu 11.04
编译环境:GCC
语言:C语言
根据所查资料:
sleep函数:
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
此函数使调用进程被挂起,直到满足以下条件之一:
1)已经过了seconds所指定的墙上时钟时间
2)调用进程捕捉到一个信号并从信号处理程序返回
注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。
sleep的返回值:
1)在上述第一种情形中,返回值是0
2)当由于捕捉到某个信号sleep提前返回时,返回值是未睡够的时间(所要求的时间减去实际休眠时间)
如果在调用sleep进程中(即睡眠时),捕捉到信号并进行处理,sleep暂停,信号处理程序执行完毕或return到sleep处时,sleep返回未睡够的时间,挂起状态结束。
看以下代码:
#include<unistd.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
void handler()
{
printf("in handler,handler will sleep 10s\n");
sleep(10);
printf("in handler,hello\n");
}
main()
{
signal(SIGALRM,handler);
printf("in main,process will sleep 5s\n");
alarm(3);
printf("in main,sleep left %ds\n",sleep(5));
}
运行状况是这样的:
in main, process will sleep 5s
(睡眠3秒)
in handler, handler will sleep 10s
(睡眠10秒)
in handler, hello
(没有睡眠)
in main, sleep left 2s