【Linux】进程信号 --- 信号处理
在Linux系统中,进程可以处理一系列预定义的信号。信号是异步事件,表示一个进程发生了某种特定的条件或状态。
以下是一个简单的例子,展示了如何在Linux下编写一个进程,该进程能够捕获并处理SIGINT信号:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void handle_sigint(int sig) {
write(1, "Captured SIGINT\n", 16);
exit(0);
}
int main() {
struct sigaction sa;
sa.sa_handler = &handle_sigint;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(SIGINT, &sa, NULL);
while(1) {
sleep(1); // 让出CPU给其他进程,同时监听是否有信号到来
}
return 0;
}
这段代码首先定义了一个信号处理函数handle_sigint
,它会在捕获到SIGINT信号时被调用。然后在主函数中,我们设置了一个sigaction
结构体来配置我们的行为,当捕获到SIGINT信号时,调用handle_sigint
函数。程序主循环中使用sleep(1)
来避免CPU使用过度。
当你运行这个程序,并且通过按下Ctrl+C
(这发送SIGINT信号给前台进程组中的所有进程),你会看到程序捕获信号并退出。
评论已关闭