alarm()函数

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;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程间的通信主要分为本机器进程间的通信和不同机器间进程的通信。本文主要描述本机进程间的通信。 一、传统Linux的...
    一叶之界阅读 408评论 0 2
  • 进程之间可以通过信号传递信息,信号是一种软中断机制,通过信号用来通知进程发生了异步事件。进程之间可以互相通过系统调...
    lintong阅读 419评论 0 2
  • 昨天晚上读完了《傲慢与偏见》,感触颇深,遂决定写下读后感,以便整理一下自己的思路。 先对女主角伊丽莎白进行分析:伊...
    佳盈阅读 864评论 2 2
  • 北京三沐丽人
    雅欣互联网阅读 226评论 0 0
  • 最近我在读清代医学大家王孟英的食疗专著《随息居饮食谱》,全书将饮食分为水饮、谷食、调和、蔬食、果食、毛羽、鳞介等七...
    茜喵阅读 8,419评论 54 214