1. 主页
  2. 文档
  3. C语言教程
  4. C语言基础教程
  5. 程序错误信号

程序错误信号

计算机中的信号是进程和操作系统之间的一种通信方式。当正在运行的程序发生严重错误时,操作系统会向进程发送信号,并且该进程可能无法继续执行。一些进程可能有一个信号处理程序,在进程离开 CPU 之前执行一些重要任务。 

信号和中断基本相同,但有一点区别,即中断由处理器生成并由内核处理,而信号由内核生成并由进程处理。错误信号通常会导致程序终止,并创建一个名为 core 的核心转储文件,该文件存储终止时进程的状态。可以使用调试器调查此文件以了解程序终止的原因。 

错误信号:

  • SIGFPE——
    这个错误信号表示发生了一些算术错误,例如除以零、浮点错误。如果程序将整数数据存储在随后用作浮点运算的位置,则会导致“无效运算”异常,因为处理器无法将数据识别为浮点值。但是这个信号没有指定浮点错误的类型。 
  • SIGILL——
    该信号表示非法指令。当垃圾指令或程序无权执行的指令被执行时,就会产生这个信号。 C 不会产生非法指令,因此不可能遇到这样的错误信号,因为可能的原因可能是目标文件可能已损坏。当发生堆栈溢出时也会产生此信号。 
  • SIGSEGV –
    当进程尝试访问未分配给它的内存位置时会生成信号,例如取消引用导致“分段错误”的野指针。该信号仅在程序远离其内存空间时才会产生,以便内存保护机制可以检测到它。 
    该名称是“分段违规”的缩写。 
  • SIGBUS –
    该名称是“总线错误”的缩写。当访问无效内存时也会产生此信号。它可能看起来与 SIGSEGV 相同,但在 SIGSEGV 中,引用的内存位置是有效的,但在 SIGBUS 的情况下,引用的内存不存在,即从内存空间中取消引用内存位置。 
  • SIGABRT –
    如果程序本身检测到错误,则使用调用 abort() 生成此信号。标准库也使用此信号来报告内部错误。C++ 中的 assert() 函数也使用 abort() 来生成这个信号。 
  • SIGSYS –
    当一个无效的参数被传递给一个系统调用时,这个信号被发送给进程。 
  • SIGTRAP –
    当发生异常时,该信号被发送给进程。这是调试器要求获得通知的。例如,如果一个变量改变了它的值,那么这将触发它。 

 

 

 

这篇文章对您有用吗?