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> # 发送 SIGTERM
bash
kill -9 <PID> # 发送 SIGKILL
bash
kill -1 <PID> # 发送 SIGHUP(如 Nginx)
bash
ulimit -c unlimited # 启用核心转储
./program # 触发 SIGSEGV 后生成 core 文件
gdb ./program core # 调试
通过理解这些信号,可以更高效地控制和管理 Linux 进程。