Linux信号机制:原理、应用与实践
1. 信号基础
信号是UNIX和Linux系统针对特定条件生成的事件,进程接收到信号后可采取相应行动。“raise”表示信号的生成,“catch”表示信号的接收。信号可由多种错误条件触发,如内存段违规、浮点处理器错误或非法指令等。同时,shell和终端处理程序也会生成信号以引发中断,进程之间还能通过发送信号来传递信息或改变行为。
信号名称在包含头文件 signal.h
后被定义,均以 SIG
开头,常见信号及其描述如下表所示:
| 信号名称 | 描述 |
| ---- | ---- |
| SIGABORT | 进程中止 |
| SIGALRM | 闹钟信号 |
| SIGFPE | 浮点异常 |
| SIGHUP | 挂起信号 |
| SIGILL | 非法指令 |
| SIGINT | 终端中断(通常由Ctrl+C触发) |
| SIGKILL | 终止信号(不可捕获或忽略) |
| SIGPIPE | 向无读端的管道写入数据 |
| SIGQUIT | 终端退出 |
| SIGSEGV | 无效内存段访问 |
| SIGTERM | 终止请求 |
| SIGUSR1 | 用户自定义信号1 |
| SIGUSR2 | 用户自定义信号2 |
若进程收到信号却未提前安排捕获,通常会立即终止,并可能生成核心转储文件 core
,该文件有助于调试。