1. 信号处理基础概念
在Linux/Unix系统中,信号是进程间通信的基本机制之一。当某个事件发生时,内核或其他进程可以向目标进程发送信号,通知其发生了特定事件。理解信号机制对于编写健壮的Bash脚本至关重要。
信号本质上是一种软件中断,它提供了一种异步事件处理机制。当进程接收到信号时,它可以采取以下三种处理方式之一:
- 执行默认操作(如终止进程)
- 忽略信号(不做任何处理)
- 捕获信号并执行自定义处理函数
注意:SIGKILL(9)和SIGSTOP(19)是两种特殊信号,它们不能被捕获、阻塞或忽略,这是为了保证系统管理员在任何情况下都能控制进程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 常见信号详解
2.1 基本信号列表
下表列出了Bash脚本中最常用的信号及其特性:
| 信号名称 | 信号值 | 默认动作 | 触发条件 | 典型用途 |
|---|---|---|---|---|
| SIGHUP | 1 | 终止 | 终端断开连接 | 重新加载配置文件 |
| SIGINT | 2 | 终止 | Ctrl+C | 中断当前操作 |
| SIGQUIT | 3 | 终止+核心转储 | Ctrl+\ | 强制退出并生成核心转储 |
| SIGTERM | 15 | 终止 | kill命令默认发送 | 优雅终止进程 |
| SIGKILL | 9 | 终止 | kill -9 | 强制终止进程 |
| SIGSTOP | 19 | 停止 | Ctrl+Z | 暂停进程执行 |
2.2 信号使用场景分析
SIGTERM(15) vs SIGKILL(9):
- SIGTERM是"礼貌"的终止请求,允许进程进行清理工作后再退出。这是kill命令的默认信号。
- SIGKILL是"强制"终止,进程会立即被结束,无法执行任何清理操作。应作为最后手段使用。
SIGHUP(1)的特殊用途:
许多守护进程(如nginx、apache)会重新读取配置文件来响应SIGHUP信号,而不是直接退出。这使得无需重启服务就能应用新配置。
