sigaction函数为什么会使得我的无限循环退出? 很奇怪的问题
本帖最后由 sedrack 于 2015-04-28 18:56:53 编辑
我有如下的小程序,来自于网上:
#include
#include
#include
#include
#include
#include
#include
#include
#include
void handler(int sig)
{
printf("rev sig=%d\n", sig);
}
int main(int argc, char *argv[])
{
struct sigaction act;
act.sa_handler = handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGINT, &act, NULL);
for (; ;)
pause();
return 0;
}
我期待的是,程序运行时,我如果发送1号信号给它,那么它调用handler打印一条语句,继续pause,等待我再次发送信号给它,如此循环。
但是实际的运行结果是:
x@a-VirtualBox:~$ ps -ef|grep a.out
x 7912 6819 0 18:52 pts/1 00:00:00 ./a.out
x 7914 7648 0 18:52 pts/17 00:00:00 grep --color=auto a.out
x@a-VirtualBox:~$ kill -1 7912
然后./a.out就退出了。
x@a-VirtualBox:~$ ./a.out
Hangup这是为什么呢? 我的理解某个地方有错?
------解决思路----------------------
你注册的是SIGINT信号,而你发的是1是SIGHUP信号,SIGHUP信号默认是程序退出。
# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX