Linux下如何在C/C++中注册信号处理函数
时间: 2024-09-09 12:02:06 浏览: 17
在Linux环境下,C/C++中注册信号处理函数通常通过`signal()`函数或者更推荐的`sigaction()`函数完成。这两个函数的具体用法如下:
1. **`signal()`函数**:
```c
void (*handler)(int signum);
sigset_t mask; // 可选,用于设置信号屏蔽集
handler = signal(signum, handler);
```
`signal()`接受两个参数:信号标识符`signum`和新的信号处理函数`handler`。如果之前已经注册了一个处理函数,那么原来的函数将被替换;如果没有,则返回原处理函数。
2. **`sigaction()`函数**:
```c
struct sigaction action;
action.sa_handler = handler;
action.sa_flags = SA_RESTART | SA_SIGINFO; // 根据需求设置标志位
sigemptyset(&action.sa_mask); // 默认忽略所有信号
int ret = sigaction(signum, &action, NULL);
```
这个函数更为灵活,它还支持`sa_handler`以外的其他成员,如`sa_flags`来指定特殊的行为。`NULL`作为第三个参数时,会获取现有动作的描述符。
在注册信号处理函数之后,当应用程序接收到相应的信号时,就会执行所注册的函数。记得在退出函数前清理信号处理,以免造成资源泄露或者未捕获的异常。