alarm()函数

2016-11-06  本文已影响0人  踩在浪花上00

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;

}

上一篇 下一篇

猜你喜欢

热点阅读