我在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”线。好 啊
但我的问题是:
我发现如果删除“for”循环,pause()在接收到SIGHUP信号后就不起作用了。这是否意味着信号会中断任何睡眠和暂停功能?
在一些linux程序中,我看到人们在信号处理程序中重新测试信号函数,比如:
void fStop((int signo){
     printf("Hup\n");
     signal(SIGHUP,fStop);//When is this necessary?
}

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

最佳答案

这是否意味着信号会中断任何睡眠和暂停功能?
可能不是全部,但它会中断pause(),是的。
pause()'s documentation (Linux)
返回值
pause()仅在捕获到信号且信号捕获时返回
函数返回。在这种情况下,pause()返回-1,errno
设置为EINTR

09-30 14:27
查看更多