Linux 系统中的信号(Signals)是进程间通信的一种机制,用于通知进程发生了某种事件。以下是常见的 Linux 信号及其用途的详细分类:
| 信号编号 | 信号名 | 默认行为 | 说明 |
|---|---|---|---|
| 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),可被捕获处理。 |
| 信号编号 | 信号名 | 默认行为 | 说明 |
|---|---|---|---|
| 4 | SIGILL |
终止+核心转储 | 非法指令(如执行了错误的机器码)。 |
| 5 | SIGTRAP |
终止+核心转储 | 调试陷阱(如断点触发)。 |
| 6 | SIGABRT |
终止+核心转储 | 进程调用 abort() 时触发(如断言失败)。 |
| 8 | SIGFPE |
终止+核心转储 | 浮点异常(如除以零)。 |
| 11 | SIGSEGV |
终止+核心转储 | 段错误(Segmentation Fault),访问无效内存地址。 |
| 13 | SIGPIPE |
终止 | 管道破裂(如向已关闭的管道写入数据)。 |
| 14 | SIGALRM |
终止 | 定时器超时(由 alarm() 或 setitimer() 设置)。 |
| 28 | SIGWINCH |
忽略 | 窗口大小改变(如终端调整大小时通知 Shell)。 |
SIGHUP, SIGINT, SIGTERM, SIGALRM 等。SIGQUIT, SIGILL, SIGABRT, SIGSEGV 等。SIGSTOP(强制暂停), SIGTSTP(可捕获暂停), SIGCONT(继续)。SIGKILL 和 SIGSTOP(确保管理员能强制控制进程)。SIGUSR1 (10) 和 SIGUSR2 (12):保留给用户自定义用途,需程序自行实现处理逻辑。kill -l # 列出所有信号名称
man 7 signal # 查看详细手册
bash
kill -15 <PID> # 发送 SIGTERMbash
kill -9 <PID> # 发送 SIGKILLbash
kill -1 <PID> # 发送 SIGHUP(如 Nginx)bash
ulimit -c unlimited # 启用核心转储
./program # 触发 SIGSEGV 后生成 core 文件
gdb ./program core # 调试通过理解这些信号,可以更高效地控制和管理 Linux 进程。