【发布时间】: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”行。好的
但我的问题是:
我发现如果我删除“for”循环,似乎 pause() 在收到 SIGHUP 信号后将不起作用。这是否意味着该信号会中断任何类型的睡眠和暂停功能?
在一些 linux 程序中,我看到人们在信号处理程序中重新评估信号函数,例如:
void fStop((int signo){
printf("Hup\n");
signal(SIGHUP,fStop);//When is this necessary?
}
只是有点困惑linux信号处理程序应该如何设计,何时重新建立处理程序,取决于不同的信号? 谢谢。
【问题讨论】: