[Linux C/C++]Linux上导致程序异常(Crash)的典型信号及原因

[Linux C/C++]Linux上导致程序异常(Crash)的典型信号及原因

解决方案goocz2025-02-01 11:10:3933A+A-

在Linux操作系统上,程序异常(crash)或死机都是由于进程收到了信号(signal)引起的,如SIGABRT、SIGSEGV和SIGBUS等,典型的都是由于程序运行出错造成的,这些信号都会杀死当前的进程。

信号(Signal)是操作系统对进程的一种事件通知机制,信号只有3个来源:

  1. Linux内核(Kernel)
  2. 其他进程
  3. 进程本身

导致进程异常的典型信号及常见原因

从本质上来说,进程Crash都是由于进程收到了内核(Kernel)发送的信号(signal)引起的,在Linux操作系统,没有其他原因。对于通过kill(), sigqueue()等系统调用发送的信号,也要进入内核并最终由内核递达给进程。

对于进程来说,除了可预期的信号,很多时候信号的产生都是因为程序运行出错造成的,如程序试图访问不允许访问的内存造成的,比如空指针,非法指针等。一般来说,当程序发生异常的时候,操作系统就会通过发送信号来杀死这个异常的进程,因为此时操作系统已经别无选择。根据异常的情况不同,Kernel可能发送的信号会有不同。

对于大家比较熟悉段错误(Segmentation Fault),正是由于信号SIGSEGV导致的,它只是我们可能经常会遇到的引起程序Crash原因中的一种而已,其实上面列表中的这些信号以及它们产生的典型原因都是需要们要熟悉和了解的,否则我们很可能在遇到这些问题时束手无措。

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5