signal

来自cppreference.com
< cpp
跳转到: 导航, 搜索

语法:

    #include <csignal>
    void ( *signal( int signal, void (* func) (int)) ) (int);

signal() 函数设置你的程序接收到信号 signal 时调用 func。 func 可以是一个通常的信号处理函数,或者以下宏之一(定义在 csignal 头文件中):

解释
SIG_DFL 默认信号处理函数
SIG_IGN 忽略此信号

可以附到(attach)信号处理函数的一些基本信号如下:

信号 描述
SIGTERM 通用停止信号,可以被捕获
SIGINT 终止程序,正常是 ctrl-c.
SIGQUIT 终止程序,同SIGINT类似
SIGKILL 停止程序。不可以被捕获。
SIGHUP 报告一个中断连接终止。
SIGSEGV 报告一个内存段错误。

signal()的返回值是之前此信号处理函数的地址,如果发生错误返回SIG_ERR。

例如,下面这个例子使用 signal() 函数在用户终止程序时调用任意数目的函数。函数们存储在一个向量(vector)中,并且一个单一的“清理”函数在程序终止时调用这个向量中的每一个函数:

  void f1() {
    cout << "calling f1()..." << endl;
  }
 
  void f2() {
    cout << "calling f2()..." << endl;
  }
 
  typedef void(*endFunc)(void);
  vector<endFunc> endFuncs;
 
  void cleanUp( int dummy ) {
    for( unsigned int i = 0; i < endFuncs.size(); i++ ) {
      endFunc f = endFuncs.at(i);
      (*f)();
    }
    exit(-1);
  }
 
  int main() {
 
    // connect various signals to our clean-up function
    signal( SIGTERM, cleanUp );
    signal( SIGINT, cleanUp );
    signal( SIGQUIT, cleanUp );
    signal( SIGHUP, cleanUp );
 
    // add two specific clean-up functions to a list of functions
    endFuncs.push_back( f1 );
    endFuncs.push_back( f2 );
 
    // loop until the user breaks
    while( 1 );
 
    return 0;
  }

相关主题: raise

个人工具
名字空间
操作
导航
工具箱
其他语言