[置顶] 信号通信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

*/

你可能感兴趣的:(kill,include,Signal)