我在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;线。行
但我的问题是:
我发现如果删除&#34; for&#34;循环,似乎暂停()在收到SIGHUP信号后无法工作。是否意味着信号会中断任何类型的睡眠和暂停功能?
- 醇>
在某些Linux程序中,我看到人们在信号处理程序中重新表达信号功能,如:
void fStop((int signo){
printf("Hup\n");
signal(SIGHUP,fStop);//When is this necessary?
}
有点困惑如何设计linux信号处理程序,何时重新建立处理程序,取决于不同的信号? 感谢。
答案 0 :(得分:1)
这是否意味着信号会在任何类型的睡眠和暂停功能中发挥作用?
可能不是所有,但它会中断pause()
,是的。
来自pause()
's documentation (Linux):
返回值
只有当信号被捕获并且信号捕获时,
pause()
才会返回 功能返回。在这种情况下,pause()
返回-1,errno
为 设为EINTR
。