在Linux环境下使用C语言进行信号处理时,主要涉及以下几个基础概念:
Linux定义了多种标准信号,包括但不限于:
以下是一个简单的信号处理示例,演示如何捕获SIGINT信号并优雅退出程序:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
volatile sig_atomic_t stop;
void handle_signal(int signum) {
if (signum == SIGINT) {
stop = 1;
}
}
int main() {
struct sigaction sa;
sa.sa_handler = handle_signal;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
exit(EXIT_FAILURE);
}
printf("Press Ctrl+C to stop...\n");
while (!stop) {
sleep(1);
}
printf("Stopping gracefully...\n");
// 执行清理工作
exit(EXIT_SUCCESS);
}
在这个示例中:
sigaction
函数设置SIGINT信号的处理函数。handle_signal
中设置一个全局标志stop
。stop
标志,当接收到SIGINT信号时,退出循环并执行清理工作。通过这种方式,可以实现一个优雅退出的程序。
领取专属 10元无门槛券
手把手带您无忧上云