Linux信号是操作系统与进程之间通信的一种简单而高效的方式,它用于通知进程某个事件已经发生。本文面向初学者,详细讲解信号产生的多种途径,并穿插常见命令和代码示例,帮助你快速掌握这一核心概念。
信号本质上是软中断,它可以由内核、另一个进程或者进程自身发送给目标进程。信号在进程通信中扮演着重要角色,常用于处理异常、用户中断、定时器到期等场景。每个信号都有一个唯一的编号和名称(如SIGINT、SIGTERM),进程可以选择忽略、捕获并自定义处理,或者执行默认操作(如终止进程)。
信号产生可以归结为以下几类:
图:信号产生的几种主要途径
执行 kill -l 可以查看系统支持的所有信号。以下是一些必知信号:
| 信号名 | 编号 | 默认动作 | 常见产生原因 |
|---|---|---|---|
| SIGINT | 2 | 终止进程 | Ctrl+C |
| SIGQUIT | 3 | 终止+核心转储 | Ctrl+\ |
| SIGKILL | 9 | 强制终止 | kill -9 |
| SIGTERM | 15 | 终止进程 | 默认kill命令 |
| SIGALRM | 14 | 终止进程 | alarm()定时器 |
| SIGCHLD | 17 | 忽略 | 子进程状态改变 |
kill命令是命令行下最常用的信号发送工具。基本语法: kill -信号 进程PID
例如,要终止PID为1234的进程,可以执行 kill -9 1234(发送SIGKILL)。如果不指定信号,默认发送SIGTERM(15)。
在C语言中,可以使用以下函数产生信号:
kill(pid, sig):向指定进程发送信号。raise(sig):向当前进程发送信号。alarm(seconds):定时器到期后向自己发送SIGALRM。abort():向自己发送SIGABRT,导致进程异常终止。下面的简单C程序捕获了SIGINT,并打印一条消息后退出:
#include#include #include void handler(int sig) { printf("捕获到信号 %d,优雅退出", sig); _exit(0);}int main() { signal(SIGINT, handler); while(1) { printf("运行中...按 Ctrl+C 尝试"); sleep(1); } return 0;}
编译运行后,按下Ctrl+C会触发信号产生,进程捕获并执行自定义处理。
本文从零开始介绍了Linux信号的基本概念,重点分析了信号产生的多种方式,包括硬件异常、软件条件、终端输入以及显式命令/函数调用。掌握这些知识,有助于你理解进程通信和系统异常处理。下一篇文章我们将深入信号的阻塞与未决状态,敬请期待!
关键词:Linux信号、信号产生、进程通信、kill命令
本文由主机测评网于2026-02-18发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20260225648.html