【问题标题】:handler for SIGALRM does not workSIGALRM 的处理程序不起作用
【发布时间】:2015-11-29 06:51:43
【问题描述】:

我正在做作业。

作业是在 Linux 系统(在 Ubuntu 上)上制作虚拟实时操作系统。

我的问题是 SIGALRM,它是调度程序的处理程序。

void scheduler(int signo) {
        /*variables */
        printf("Scheduler awake!!\n");
        /* Do
           Schedule */
}

int RunScheduler(void) {
        signal(SIGALRM, scheduler);
        alarm(1);
        while(1)
                pause();
        return 0;
}

int main() {
        RunScheduler();
}

函数 scheduler(handler) 不起作用。 alarm(1) 有效,但在 alarm(1) 后暂停。

信号处理程序不起作用有什么原因吗??

【问题讨论】:

    标签: c linux signals scheduler


    【解决方案1】:

    同样的代码在我的机器上也能正常工作。

    我使用了 Ubuntu 附带的 gcc 编译器。你用的是同一个编译器吗?

    【讨论】:

    • 是的,在 ubuntu 中使用 gcc
    • 我认为循环内的暂停可能会导致行为变化。尝试在没有暂停的情况下运行代码(因为无论如何您都处于无限循环中)。如果这不起作用,请使用 sigaction 而不是信号。
    • 我明白了。这是我的错。函数 sleep 的参数定义错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多