温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样理解SIGALRM信号

发布时间:2021-12-09 09:25:15 阅读:277 作者:柒染 栏目:大数据
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章将为大家详细讲解有关怎样理解SIGALRM信号,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

SIGALRM信号是操作系统中的其中一个信号。他的作用是设置进程隔多久后会收到一个SIGALRM信号。下面我们看一下他的实现原理。
    alarm系统调用是设置多久触发SIGALRM信号的函数。下面是他的声明。

#include <unistd.h>unsigned alarm(unsigned seconds);
 

我们看看实现。

int sys_alarm(long seconds){    int old = current->alarm;    // 算出原来的时间    if (old)        old = (old - jiffies) / HZ;    /*        系统每隔n秒触发一次时钟中断。jiffies是系统发生时钟中断的次数。        1秒等于HZ个jiffies,这里就是算出jiffies数,即时钟中断发生多少次后触发SIGALRM信号    */    current->alarm = (seconds>0)?(jiffies+HZ*seconds):0;    // 返回旧的    return (old);}
 

我们看到PCB中使用alarm字段记录了SIGALRM信号触发的时间。我们再来看一下触发的时机。

 */void schedule(void){    int i,next,c;    struct task_struct ** p;    // 遍历进程    for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)        if (*p) {            /*                判断是否设置了alarm并且过期了                alarm < jiffies说明过期了。设置alarm信号,清除设置标记            */            if ((*p)->alarm && (*p)->alarm < jiffies) {                    (*p)->signal |= (1<<(SIGALRM-1));                    (*p)->alarm = 0;                }        }        ...}
 

在进程调度的时候,系统会处理SIGALRM信号的逻辑,判断是否可以触发SIGALRM信号了。是的话在PCB中打上标记。但是这时候如果该进程没有被调度执行,那SIGALRM信号的函数会被延迟执行。即这里只是记录信息的时机,不一定是执行的时机。
    另外在父进程创建子进程的时候(fork),子进程不会进程父进程的alarm信息(重置为0),但是如果一个进程设置了SIGALRM然后通过execve系列函数执行新的程序时,alarm信息会被继承下来。最后我们看一下用法。

#include <unistd.h#include <stdio.h#include <stdlib.h#include <signal.h> void handle_alarm() {     exit(0); } int main(int argc, char *argv[]) {     signal(SIGALRM, handle_alarm);     alarm(10);     while(1) {} } 
 

进程在10秒或10秒之后触发SIGALRM信号,然后执行信号处理函数,最后退出。

关于怎样理解SIGALRM信号就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4217331/blog/4379014

AI

开发者交流群×