【C语言练习】071. 理解C语言中的信号处理
071. 理解C语言中的信号处理
- 071. 理解C语言中的信号处理
- 常用信号列表
- 进程控制信号
- 程序错误信号
- 终端相关信号
- 其他重要信号
- 示例:信号处理代码
- 注意事项
- 1. 信号的基本概念
- 2. 常见的信号
- 3. 信号处理函数
- 使用`signal`函数
- 使用`sigaction`函数
- 4. 信号的默认行为
- 5. 忽略信号
- 6. 阻塞信号
- 7. 信号的优缺点
- 优点
- 缺点
- 8. 总结
071. 理解C语言中的信号处理
在C语言中,信号处理是一种用于处理异步事件(如用户中断、硬件异常等)的机制。信号是一种软件中断,当某些事件发生时,操作系统会向进程发送信号。进程可以捕获这些信号,并通过信号处理函数来响应这些事件。
常用信号列表
C语言中信号处理通过<signal.h>
头文件实现,以下为常见信号及其用途:
#include <signal.h>
进程控制信号
- SIGINT (2):终端中断(如Ctrl+C)
- SIGQUIT (3):终端退出(如Ctrl+\)
- SIGTERM (15):终止进程(默认不可忽略)
- SIGKILL (9):强制终止进程(无法捕获或忽略)
- SIGSTOP (19):暂停进程执行(无法捕获或忽略)
程序错误信号
- SIGSEGV (11):非法内存访问(段错误)
- SIGILL (4):执行非法指令
- SIGFPE (8):算术运算错误(如除以零)
- SIGABRT (6):调用abort()触发的信号
- SIGBUS (7):总线错误(错误内存访问)
终端相关信号
- SIGHUP (1):终端连接断开
- SIGTSTP (20):终端挂起(Ctrl+Z)
- SIGCONT (18):恢复已停止的进程
其他重要信号
- SIGALRM (14):定时器超时(由alarm()设置)
- SIGUSR1 (10) / SIGUSR2 (12):用户自定义信号
- SIGCHLD (17):子进程状态改变
- SIGPIPE (13):管道破裂(写入无读端的管道)
示例:信号处理代码
#include <stdio.h>
#include <signal.h>
#include <unistd.h>void handler(int sig) {printf("Received signal: %d\n", sig);
}int main() {signal(SIGINT, handler);while(1) {printf("Waiting for signal...\n")