我们什么时候需要在信号处理程序内再次建立信号功能?

时间:2017-04-29 10:56:12

标签: c linux signals pause

我在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;
}

它运行并等待信号。每次我发送&#34; kill -1 xxx&#34;它打印出一个&#34; Hup&#34;线。行

但我的问题是:

  
      
  1. 我发现如果删除&#34; for&#34;循环,似乎暂停()在收到SIGHUP信号后无法工作。是否意味着信号会中断任何类型的睡眠和暂停功能?

  2.   
  3. 在某些Linux程序中,我看到人们在信号处理程序中重新表达信号功能,如:

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

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

1 个答案:

答案 0 :(得分:1)

  

这是否意味着信号会在任何类型的睡眠和暂停功能中发挥作用?

可能不是所有,但它会中断pause(),是的。

来自pause()'s documentation (Linux)

  

返回值

     只有当信号被捕获并且信号捕获时,

pause()才会返回          功能返回。在这种情况下,pause()返回-1,errno为          设为EINTR