SIGSEGV和SIGBUS都是因为访问内存的时候出现的问题,但是两者不同
SIGSEGV是因为无效的内存访问导致的,一般是指针指向不存在的地址所导致(Invalid memory reference);
SIGBUS是因为总线出错(bus error)。地址一般是先校验地址对齐再校验其他的,校验地址对齐后会放入数据总线,这时有问题就会报SIGBUS的错误。
一般情况下,SIGBUS是因为内存地址没有对齐导致,而SIGSEGV是由于内存地址不合法造成。
通过man 7 signal可以查看所有信号: