信号通信SIG

#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);

}


FAQ是英文Frequently Asked Questions的缩写,中文意思就是“经常问到的问题”,或者更通俗地叫做“常见问题解答”。

SIGBUS与SIGSEGV信号的一般区别如下:

1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该
   指针。通常是未对齐的数据访问所致。

2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对
   应该地址。


一般我们平时遇到SIGBUS时总是因为地址未 对齐导致的,而SIGSEGV则是由于内存地址不合法造成的。

/*
ps -aux|grep sig_bus
qust@qust-K42JZ:~$ kill -BUS 5379

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值