信号处理 #

一、常见信号 #

信号 编号 说明
SIGHUP 1 挂起
SIGINT 2 中断(Ctrl+C)
SIGQUIT 3 退出
SIGKILL 9 强制终止
SIGTERM 15 终止
SIGTSTP 20 暂停(Ctrl+Z)

二、trap命令 #

bash
#!/bin/bash

# 捕获信号
trap 'echo "收到SIGINT"' SIGINT

# 捕获多个信号
trap 'cleanup' SIGINT SIGTERM

# 忽略信号
trap '' SIGINT

# 恢复默认
trap - SIGINT

三、清理处理 #

bash
#!/bin/bash

# 设置清理函数
cleanup() {
    echo "清理临时文件..."
    rm -f /tmp/temp_$$.*
    exit
}

# 注册清理
trap cleanup EXIT SIGINT SIGTERM

# 创建临时文件
temp_file="/tmp/temp_$$_data"
echo "使用临时文件: $temp_file"

# 主逻辑
echo "执行任务..."
sleep 10

四、实战示例 #

bash
#!/bin/bash

# 优雅退出
graceful_shutdown() {
    echo "正在关闭服务..."
    # 保存状态
    # 关闭连接
    # 清理资源
    exit 0
}

trap graceful_shutdown SIGTERM SIGINT

# 长时间运行的服务
while true; do
    echo "服务运行中..."
    sleep 1
done

下一步 #

你已经掌握了信号处理,接下来让我们学习 调试技巧

最后更新:2026-03-27