在Linux操作系统中,Linux进程信号是一种异步通知机制。通俗地讲,它就像手机上的“应用消息通知”。当某个事件发生时(如按下Ctrl+C),系统会向进程发送一个信号,告诉进程该起床干活了或者准备自杀。
信号的整个生命周期可以概括为:信号产生 -> 信号在进程中注册/阻塞 -> 信号被处理。这就是完整的信号生命周期。
每一个Linux进程在内核中都有三张关键的表来管理信号。理解了这三张表,你就掌握了信号的灵魂:
接下来我们通过代码来看看如何自定义信号的处理逻辑。
我们可以使用 signal() 函数来告诉进程:当收到某个信号时,不要按默认套路出牌,去执行我的函数。
#include <stdio.h>#include <signal.h>#include <unistd.h>void my_handler(int sig) { printf("捕获到信号: %d,嘿,你杀不死我!\n", sig);}int main() { // 将SIGINT(Ctrl+C)的处理函数改为my_handler signal(SIGINT, my_handler); while(1) { printf("进程运行中...PID: %d\n", getpid()); sleep(1); } return 0;} alarm() 允许你在指定的秒数后向当前进程发送一个 SIGALRM 信号。
#include <stdio.h>#include <unistd.h>#include <signal.h>void timeout(int sig) { printf("闹钟响了!时间到!\n");}int main() { signal(SIGALRM, timeout); alarm(3); // 3秒后发送信号 printf("等待闹钟中...\n"); pause(); // 挂起进程直到收到信号 return 0;} 理解Linux信号的关键在于那“三张表”:信号屏蔽字决定能不能进,Pending记录谁进来了,信号处理函数决定进来后干什么。掌握了这套机制,你就能在多进程编程中游刃有余地处理各种突发状况。
本文由主机测评网于2026-03-24发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:http://www.vpshk.cn/20260332724.html