Linux信号是Linux操作系统中进程间通信(IPC)的一种机制,用于通知进程某个事件已经发生。信号可以由系统、用户程序或其他进程发送给目标进程,以触发特定的行为或响应。
kill()
或sigqueue()
发送给进程,也可以由系统在特定事件发生时自动发送。sigaction()
系统调用设置信号处理函数,并确保信号处理函数尽可能简单快速。以下是一个简单的示例,演示如何捕获并处理SIGINT信号(通常由Ctrl+C触发):
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void sigint_handler(int signum) {
printf("Received SIGINT signal (%d). Exiting...\n", signum);
exit(0);
}
int main() {
struct sigaction sa;
sa.sa_handler = sigint_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
return 1;
}
printf("Press Ctrl+C to send SIGINT signal...\n");
while (1) {
sleep(1);
}
return 0;
}
在这个示例中,我们使用sigaction()
系统调用设置了一个SIGINT信号的处理函数sigint_handler()
。当用户按下Ctrl+C时,进程会捕获SIGINT信号并执行相应的处理函数,打印一条消息并退出程序。
领取专属 10元无门槛券
手把手带您无忧上云