linux中signal()调用的问题
刚测试的一代码:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void ouch(int sig)
{
printf("------ouch()-----\n");
}
void inch(int sig)
{
printf("------inch()-----\n");
(void) signal(SIGINT, SIG_DFL);
}
int main()
{
(void) signal(SIGINT, ouch);
(void) signal(SIGINT, inch);
while(1)
{
printf("--------------\n");
sleep(1);
}
return 0;
}
运行结果:
--------------
--------------
^C------inch()-----
--------------
--------------
^C
为什么只执行了inch()而没执行ouch()呢,而且main()中的signal()已经捕获了信号SIGINT,inch()里的signal调用怎么还能处理它
[解决办法]
先设置为ouch,然后又设为inch,当然是执行inch了。然后设为默认,SIGINT得默认就是终止程序。
[解决办法]
signal函数其实就设置一下函数指针,再把旧的返回出来。所以
(void) signal(SIGINT, ouch);//白干活
(void) signal(SIGINT, inch);
(void) signal(SIGINT, SIG_DFL);//设置回调指针为0,也就是不在回调。
你理解错了。