插件窝 干货文章 linux有哪些信号

linux有哪些信号

终止 转储 进程 信号 419    来源:    2025-04-30

Linux 系统中的信号(Signals)是进程间通信的一种机制,用于通知进程发生了某种事件。以下是常见的 Linux 信号及其用途的详细分类:


1. 常用标准信号(POSIX 标准)

信号编号 信号名 默认行为 说明
1 SIGHUP 终止 挂起(Hangup),终端断开或控制进程终止时触发。常用于重新加载配置文件(如 nginx -s reload)。
2 SIGINT 终止 中断(Interrupt),用户按下 Ctrl+C 时触发。
3 SIGQUIT 终止+核心转储 退出(Quit),用户按下 Ctrl+\ 时触发,生成核心转储文件用于调试。
9 SIGKILL 终止(不可捕获) 强制杀死进程,无法被忽略或阻塞。
15 SIGTERM 终止 优雅终止(Terminate),kill 命令的默认信号,允许进程清理资源。
17 SIGCHLD 忽略 子进程状态改变时发送给父进程(如子进程终止)。
19 SIGSTOP 停止(不可捕获) 强制暂停进程(如 Ctrl+Z),无法被忽略或阻塞。
18 SIGCONT 继续 恢复被暂停的进程(如 fg/bg 命令)。
20 SIGTSTP 停止 终端暂停(Ctrl+Z),可被捕获处理。

2. 其他重要信号

信号编号 信号名 默认行为 说明
4 SIGILL 终止+核心转储 非法指令(如执行了错误的机器码)。
5 SIGTRAP 终止+核心转储 调试陷阱(如断点触发)。
6 SIGABRT 终止+核心转储 进程调用 abort() 时触发(如断言失败)。
8 SIGFPE 终止+核心转储 浮点异常(如除以零)。
11 SIGSEGV 终止+核心转储 段错误(Segmentation Fault),访问无效内存地址。
13 SIGPIPE 终止 管道破裂(如向已关闭的管道写入数据)。
14 SIGALRM 终止 定时器超时(由 alarm()setitimer() 设置)。
28 SIGWINCH 忽略 窗口大小改变(如终端调整大小时通知 Shell)。

3. 信号的行为分类

  • 终止进程SIGHUP, SIGINT, SIGTERM, SIGALRM 等。
  • 终止并生成核心转储SIGQUIT, SIGILL, SIGABRT, SIGSEGV 等。
  • 暂停/继续进程SIGSTOP(强制暂停), SIGTSTP(可捕获暂停), SIGCONT(继续)。
  • 不可捕获/忽略的信号SIGKILLSIGSTOP(确保管理员能强制控制进程)。

4. 用户自定义信号

  • SIGUSR1 (10) 和 SIGUSR2 (12):保留给用户自定义用途,需程序自行实现处理逻辑。

5. 查看所有信号

kill -l  # 列出所有信号名称
man 7 signal  # 查看详细手册

常见使用场景

  1. 优雅终止进程
    bash kill -15 <PID> # 发送 SIGTERM
  2. 强制杀死进程
    bash kill -9 <PID> # 发送 SIGKILL
  3. 重新加载配置
    bash kill -1 <PID> # 发送 SIGHUP(如 Nginx)
  4. 调试段错误
    bash ulimit -c unlimited # 启用核心转储 ./program # 触发 SIGSEGV 后生成 core 文件 gdb ./program core # 调试

通过理解这些信号,可以更高效地控制和管理 Linux 进程。