#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void my_func(int sign_no)
{
if(sign_no==SIGBUS)
printf("I have get SIGBUS \n");
}
void alarm_func(int sign_no)
{
if(sign_no==SIGALRM)
printf("time is out \n");
}
int main()
{
//alarm(2);
printf("Waiting for signal SIGBUS \n");
signal(SIGBUS,my_func);//信号处理
//signal(SIGALRM,alarm_func);
pause();//将进程挂起直到捕捉到信号为止 ,只有执行了一个信号处理函数后,挂起才结束
exit(0);
/*
ps -aux|grep sig_bus
qust@qust-K42JZ:~$ kill -BUS 5379
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void my_func(int sign_no)
{
if(sign_no==SIGBUS)
printf("I have get SIGBUS \n");
}
void alarm_func(int sign_no)
{
if(sign_no==SIGALRM)
printf("time is out \n");
}
int main()
{
//alarm(2);
printf("Waiting for signal SIGBUS \n");
signal(SIGBUS,my_func);//信号处理
//signal(SIGALRM,alarm_func);
pause();//将进程挂起直到捕捉到信号为止 ,只有执行了一个信号处理函数后,挂起才结束
exit(0);
}
FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通俗地叫做“常见问题解答”。
SIGBUS与SIGSEGV信号的一般区别如下:
1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该
指针。通常是未对齐的数据访问所致。
2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对
应该地址。
/*
ps -aux|grep sig_bus
qust@qust-K42JZ:~$ kill -BUS 5379
*/