#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
*/
本文详细介绍了SIGBUS和SIGSEGV信号的区别,包括它们各自代表的错误类型和常见场景。同时,通过示例代码展示了如何在C语言中捕获和处理这些信号。

被折叠的 条评论
为什么被折叠?



