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