在Linux系统中,进程可以通过信号来处理各种事件,例如中断、终止等。为了响应这些信号,进程需要设置一个信号处理器(signal handler)。以下是一个简单的示例,展示了如何在C语言中设置信号处理器来响应SIGINT信号(通常由Ctrl+C触发):
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
// 信号处理器函数
void signal_handler(int signum) {
printf("接收到信号: %d\n", signum);
// 在这里执行你的处理逻辑
exit(signum); // 结束进程
}
int main() {
// 注册信号处理器
struct sigaction sa;
sa.sa_handler = signal_handler; // 设置信号处理器函数
sigemptyset(&sa.sa_mask); // 清空信号掩码
sa.sa_flags = 0; // 无特殊标志
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
exit(EXIT_FAILURE);
}
printf("按Ctrl+C发送SIGINT信号...\n");
while (1) {
sleep(1); // 主循环,可以执行其他任务
}
return 0;
}
在这个示例中,我们使用sigaction
函数注册了一个信号处理器signal_handler
来处理SIGINT信号。当进程收到SIGINT信号时,signal_handler
函数会被调用,打印一条消息并结束进程。
要编译并运行此程序,请将其保存为signal_example.c
,然后使用以下命令:
gcc signal_example.c -o signal_example
./signal_example
现在,当你按下Ctrl+C时,程序将捕获SIGINT信号并调用signal_handler
函数。
请注意,这只是一个简单的示例。在实际应用中,你可能需要处理多个信号,并在信号处理器中执行更复杂的操作。同时,要注意信号处理器的安全性,因为在信号处理器中执行的代码应该是异步信号安全的(async-signal-safe)。