如何停止或跳到主信号?

时间:2018-10-26 16:44:38

标签: c linux signals

我应该在代码中添加些什么来停止信号并返回Main?

请勿使用'()exit',我想结束或跳转信号并转到主要功能。 我尝试分支。但这不起作用。


main{

  void countdown(int); 
  signal (SIGALRM, countdown);
    .... 
    ....
    ....
}

void countdown(int signum)
{
    static int num =10;
    printf("%d..",num--);
    fflush(stdout);
    if (num <0){
        printf("DONE");
        exit(0); // i want to change do not use exit() and get out this signal
    }
}

2 个答案:

答案 0 :(得分:0)

signal在收到呼叫时异步调用一个函数。当被调用的函数(此处为countdown终止时,它将在捕获信号后的左侧位置右移。

因此,在这里,我要说的是,您只需要删除exit(0);并让大自然完成其余的工作即可。

答案 1 :(得分:0)

您不能从信号处理程序中调用您使用的任何功能。仅来自man signal-safety list的功能。

出于显示进度指示器而不是使用alarm/SIGALRM的目的,您可能希望启动另一个使用nanosleep的线程,直到下一个刻度,然后打印进度状态。