我在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
。