免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3881 | 回复: 3
打印 上一主题 下一主题

进程处于sleep状态时,能否处理SIGLARM信号 [复制链接]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-18 21:46 |只看该作者 |倒序浏览
写程序的时候突然想到几个问题,感到非常迷惑,希望大家指点。
    如果给进程注册了SIGALRM信号的处理函数,假设每隔1s产生SIGALRM信号,然后使进程睡眠10s,即sleep(10), 在睡眠的过程中,进程是否接收SIGALRM信号,还是SIGALRM信号会把进程唤醒,使进程不能睡眠10s???

论坛徽章:
0
2 [报告]
发表于 2011-10-18 21:50 |只看该作者
sys_nanosleep -> hrtimer_nanosleep -> do_nanosleep

static int __sched do_nanosleep(struct hrtimer_sleeper *t, enum hrtimer_mode mode)
{
        hrtimer_init_sleeper(t, current);

        do {
                set_current_state(TASK_INTERRUPTIBLE);               
                                hrtimer_start(&t->timer, t->timer.expires, mode);
                if (!hrtimer_active(&t->timer))
                        t->task = NULL;

                if (likely(t->task))
                        schedule();

                hrtimer_cancel(&t->timer);
                mode = HRTIMER_MODE_ABS;

        } while (t->task && !signal_pending(current));

        __set_current_state(TASK_RUNNING);

        return t->task == NULL;
}

可以被信号唤醒

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
3 [报告]
发表于 2011-10-18 22:48 |只看该作者
回复 2# unbutun


    谢谢啦!
    如果这样的话,sleep函数岂不是不能保证睡眠指定的时间了, 怎么才能实现不能被信号唤醒的睡眠呢,不管有没有信号,就是睡眠制定的时间才被唤醒。

论坛徽章:
0
4 [报告]
发表于 2011-10-18 22:52 |只看该作者
回复 3# liujunwei1234


    睡眠之前阻塞所有信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP