最直接、最可靠的方式是运行kill -l,它输出当前系统实际支持的全部信号编号与名称(共64个,1–31为传统信号、34–64为实时信号),不依赖文档或头文件,且支持反查(如kill -l term得15)、大小写不敏感、前缀可省。

最直接、最可靠的方式是运行 kill -l。它不依赖头文件或文档,输出的是当前系统实际支持的全部信号编号与名称,结果唯一可信。
用 kill -l 查全部信号(含编号和名称)
在终端中执行:
kill -l
你会看到类似输出(共 64 个信号,但中间有空缺):
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
…
34) SIGRTMIN 35) SIGRTMIN+1 … 64) SIGRTMAX
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 编号 1–31 是传统信号(非实时),不排队,多次发送可能丢失
- 编号 34–64 是实时信号,支持排队、按顺序递送,适合高可靠场景
- 没有 32、33 号信号——它们被内核保留,kill -l 不显示
- 输出中省略了
SIG前缀,但使用时可带可不带(kill -TERM和kill -SIGTERM等价)
用 kill -l 反查单个信号编号或名称
这个功能在写脚本或调试时特别实用,避免硬编码数字:
-
kill -l TERM→ 输出 15 -
kill -l 1→ 输出 HUP - 大小写不敏感:
kill -l sigkill返回 9 - 前缀可省:
kill -l usr1和kill -l SIGUSR1都返回 10
过滤和脚本化使用的小技巧
日常排查或自动化时,常需快速定位某类信号:
- 只看实时信号:
kill -l | grep RT - 排除默认忽略的信号(如 SIGCHLD):
kill -l | grep -v CHLD - 导出为数组供 shell 脚本用:
signals=($(kill -l)),注意格式含括号,索引从 0 开始(${signals[0]}是1)) - 真正安全的脚本判断方式:
kill -l NAME &>/dev/null检查信号是否存在,而非解析输出文本
为什么不推荐直接查 signal.h 头文件?
有人会去翻 /usr/include/asm-generic/signal.h 或 bits/signum.h,但这条路容易踩坑:
- 头文件反映的是编译时内核 ABI 的定义,不是当前运行系统的实际能力
- 不同架构(x86_64 vs aarch64)或内核版本,
SIGRTMIN起始值可能不同(常见为 34,但非绝对) - 发行版头文件路径不统一,
find /usr/include -name signal.h可能返回多个结果,难以判断哪个生效 -
kill -l是 shell 内置命令(或/bin/kill),调用的是当前系统的sys_siglist,结果唯一可信










