进程通信的方式有很多,而Linux信号就像进程世界里的“紧急电话”——它不传输大量数据,却能以最快的速度通知进程发生了重要事件。本文是Linux信号入门的初篇,带你彻底搞懂信号的本质、用法以及常见的信号处理技巧。
信号(Signal)是Linux/Unix系统中一种经典的进程通信机制,用于通知进程某个异步事件的发生。你可以把它想象成手机上的紧急通知:不需要你主动去查询,系统会在关键时刻“叮”一声提醒你。常见的信号如SIGINT(2号信号,通常由Ctrl+C触发)、SIGTERM(15号信号,终止进程)、SIGKILL(9号信号,强制杀死进程)等。
信号可以由硬件异常(如除零)、终端操作(Ctrl+C)、软件条件(如alarm定时器)或系统调用(kill、raise)产生。其生命周期包括:产生、在进程中注册、在合适时机递送、执行信号处理。每个信号都有默认处理动作,例如终止、忽略、停止等。
最常用的发送命令是kill。例如:kill -SIGINT 1234 向PID为1234的进程发送SIGINT信号。在C语言中,可以使用kill()或raise()函数。
进程可以通过signal()或sigaction()函数改变信号的处置方式。下面是一个简单的C程序,捕获SIGINT并打印消息,而不是退出:
#include #include #include void handle_sigint(int sig) { printf("收到SIGINT信号,但我不退出!");}int main() { signal(SIGINT, handle_sigint); // 自定义信号处理 while(1) { printf("程序运行中... (按Ctrl+C测试信号)"); sleep(2); } return 0;} 运行这段代码,按下Ctrl+C,你会看到自定义的提示信息,而进程不会终止——这就是信号处理的威力。
Linux信号机制虽然简单,但也有一些陷阱:早期信号可能丢失(不可靠信号)、信号处理函数中应避免调用不可重入函数等。进阶知识将在后续文章中讲解。
小结:信号是进程间快速通信的“紧急电话”,掌握SIGINT等常见信号以及如何自定义处理,是深入学习Linux系统编程的基础。希望这篇Linux信号入门文章对你有帮助!
本文由主机测评网于2026-02-28发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20260227603.html