在捕获SIGINT(即键盘中断,通常是Ctrl+C)信号时,可以通过注册信号处理函数来执行清理操作。在信号处理函数中,可以使用全局或静态变量来跟踪程序状态,以便在清理时正确处理。
以下是一个C语言的示例代码,展示了如何捕获SIGINT信号并进行清理:
#include
#include
// 全局变量用于跟踪程序状态
int interrupted = 0;
// SIGINT信号处理函数
void sigint_handler(int signum) {
printf("Received SIGINT signal. Cleaning up...\n");
// 执行清理操作
// 设置全局变量以指示程序已被中断
interrupted = 1;
}
int main() {
// 注册SIGINT信号处理函数
signal(SIGINT, sigint_handler);
// 主循环
while (!interrupted) {
// 执行主要操作
// 检查是否被中断
if (interrupted) {
// 执行清理操作
// 退出循环
break;
}
}
printf("Program terminated.\n");
return 0;
}
在上面的代码中,sigint_handler函数是用于处理SIGINT信号的信号处理函数。在这个函数中,可以执行任何清理操作,例如关闭文件、释放内存等。在主循环中,检查全局变量interrupted的值来判断程序是否已被中断,以执行相应的清理操作。
请注意,使用signal函数注册的信号处理函数会覆盖默认的信号处理行为。因此,如果有其他特定的需求,可以根据实际情况进行修改。
下一篇:捕获SIGSEGV异常