C++中的信号处理机制是通过signal函数来实现的。signal函数接受两个参数,第一个是信号编号,第二个是信号处理函数的地址。当收到指定信号时,会调用该处理函数进行处理。
使用signal函数需要注意以下几点:
- 信号处理函数必须是void类型,并且只能有一个int类型参数,表示信号编号。
- 为了避免在信号处理函数中出现不确定行为,应该尽可能地保持简单和短小。
- 信号处理函数会打断正在运行的程序代码,所以需要谨慎处理。
- 在Linux环境下,信号处理函数的可重入性要求更高。
以下是一个处理SIGINT信号的代码示例:
#include <iostream>
#include <csignal>
#include <unistd.h>
using namespace std;
void signalHandler(int signal)
{
cout << "Received signal " << signal << endl;
}
int main()
{
signal(SIGINT, signalHandler); // 注册信号处理函数
while (1)
{
cout << "Sleeping..." << endl;
sleep(1);
}
return 0;
}
在上面的代码中,我们通过signal函数注册了一个处理SIGINT信号的signalHandler函数。当按下键盘上的Ctrl+C组合键时,程序会收到SIGINT信号,执行signalHandler函数,输出"Received signal 2"。程序会反复进入while循环,直到按下键盘上的Ctrl+C组合键退出程序。