C语言 <signal.h> raise 函数

  • 描述

    C库函数int raise(int sig)导致生成信号sig。该SIG参数与SIG宏兼容。
  • 声明

    以下是raise函数的声明。
    
    int raise(int sig)
    
    参数
    • sig - 这是要发送的信号号。以下是一些重要的标准信号常数-
      • SIGABRT - (信号中止)异常终止,如由中止功能启动。
      • SIGFPE - (信号浮点异常)错误的算术运算,如除零或导致溢出的运算(不一定是浮点运算)。
      • SIGILL - (信号非法指令)无效的函数图像,如非法指令。这通常是由于代码损坏或试图执行数据造成的。
      • SIGINT - (信号中断)交互注意信号。通常由应用程序用户生成。
      • SIGSEGV - (信号分割冲突)对存储器的无效访问——当程序试图在分配给它的内存之外读写时。
      • SIGTERM - (信号终止)发送给程序的终止请求。
  • 返回值

    如果成功,此函数将返回零,否则返回非零。
    示例
    以下示例显示signal函数的用法-
    
    #include <signal.h>
    #include <stdio.h>
    
    void signal_catchfunc(int);
    
    int main () {
       int ret;
    
       ret = signal(SIGINT, signal_catchfunc);
    
       if( ret == SIG_ERR) {
          printf("Error: unable to set signal handler.\n");
          exit(0);
       }
       printf("Going to raise a signal\n");
       ret = raise(SIGINT);
       
       if( ret !=0 ) {
          printf("Error: unable to raise SIGINT signal.\n");
          exit(0);
       }
    
       printf("Exiting...\n");
       return(0);
    }
    
    void signal_catchfunc(int signal) {
       printf("!! signal caught !!\n");
    }
    
    尝试一下
    让我们编译并运行以上程序以产生以下结果-
    
    Going to raise a signal
    !! signal caught !!
    Exiting...