【问题标题】:When do we need to establish signal function again inside a signal handler?我们什么时候需要在信号处理程序中再次建立信号函数?
【发布时间】:2017-04-29 10:56:11
【问题描述】:

我有一个linux下的简单程序,效果很好:

#include<unistd.h>
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
void fStop(int signo){
    printf("Hup\n");
}
int main(){
    signal(SIGHUP,fStop);
    for(;;){
        pause();
    }
    return 0;
}

它运行并等待信号。每次我向它发送“kill -1 xxx”时,它都会打印一个“Hup”行。好的

但我的问题是:

  1. 我发现如果我删除“for”循环,似乎 pause() 在收到 SIGHUP 信号后将不起作用。这是否意味着该信号会中断任何类型的睡眠和暂停功能?

  2. 在一些 linux 程序中,我看到人们在信号处理程序中重新评估信号函数,例如:

void fStop((int signo){
     printf("Hup\n");
     signal(SIGHUP,fStop);//When is this necessary?
}

只是有点困惑linux信号处理程序应该如何设计,何时重新建立处理程序,取决于不同的信号? 谢谢。

【问题讨论】:

    标签: c linux signals pause


    【解决方案1】:

    这是否意味着信号会干扰任何类型的睡眠和暂停功能?

    可能不是全部,但它会打断pause(),是的。

    来自pause()'s documentation (Linux)

    返回值

    pause() 仅在捕获到信号并且信号捕获时返回 函数返回。在这种情况下,pause() 返回 -1,errno 是 设置为EINTR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      相关资源
      最近更新 更多