alarm函数
要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。需要注意的是,经过指定的秒数后,信号由内核产生,由于进程调度的延迟,所以进程得到控制从而能void handle(int sig)够处理该信号还需要一些时间。
{
if (14 == sig)
{
printf("catched signal SIGALRM\n");
}
}
int main(void)
{
signal(14, handle);
//SIGALRM默认处理动作是结束进程
//可以通过signal来自定义该信号的处理动作
alarm(5);
//若alarm设定闹钟之后,有一个优先级更高
//的进程B需要运行,则系统优先运行B
//若进程B运行时间超过了设定的闹钟时间
//则在调用pause函数之前信号就已发出并且
//对其进行了处理,
//从而导致pause之后没有信号来唤醒该进程
//则该进程一直沉睡
pause();
printf("alarm...wake up\n");
return 0;
}
如果有以前为进程登记的尚未超时的闹钟时钟,而且本次调用的seconds值是0,则取消以前的闹钟时钟,其余留值仍作为alarm函数的返回值。
////////////////////////////////////////////////////////////////////////五秒后结束,不会执行下面的内容;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////函数说明:alarm()用来设置信号SIGALRM 在经过参数seconds 指定的秒数后传送给目前的进程. 如果参数seconds 为0, 则之前设置的闹钟会被取消, 并将剩下的时间返回.
返回值:返回之前闹钟的剩余秒数, 如果之前未设闹钟则返回0.
void handle(int sig)
{
if (14 == sig)
{
printf("catched signal SIGALRM\n");
}
}
int main(void)
{
signal(14, handle);
//SIGALRM默认处理动作是结束进程
//可以通过signal来自定义该信号的处理动作
alarm(5);
//若alarm设定闹钟之后,有一个优先级更高
//的进程B需要运行,则系统优先运行B
//若进程B运行时间超过了设定的闹钟时间
//则在调用pause函数之前信号就已发出并且
//对其进行了处理,
//从而导致pause之后没有信号来唤醒该进程
//则该进程一直沉睡
pause();
printf("alarm...wake up\n");
return 0;
}