kill -l直接列出系统全部信号编号及名称,是查询信号的基础方法;其输出含64个信号(1–31为传统信号,34–64为实时信号),支持反查如kill -l term得15、kill -l 1得hup;sigterm(15)允许进程优雅退出并清理资源,sigkill(9)则强制终止且不可捕获,仅作最后手段。

直接运行 kill -l 就能列出系统支持的所有信号编号和名称,这是最基础也最关键的一步。但光看列表不够,真正影响进程管理效果的,是不同信号背后的处理机制和进程响应方式。
用 kill -l 查看全部信号
在终端输入:
kill -l
会输出类似以下内容(共64个信号,编号1–31为传统信号,34–64为实时信号):
1) SIGHUP 2) SIGINT 3) SIGQUIT ... 9) SIGKILL 15) SIGTERM 18) SIGCONT 19) SIGSTOP ...
注意:kill -l 不带参数时显示全部;加信号名或编号可反查,例如:
kill -l TERM → 输出 15kill -l 1 → 输出 HUP
SIGTERM(15号):默认的“优雅退出”信号
不带选项执行 kill PID,实际等价于 kill -15 PID 或 kill -TERM PID。它的特点是:
- 进程可以捕获、忽略或自定义处理该信号
- 多数服务会借此释放文件锁、关闭日志、保存状态后退出
- 如果进程正在忙(如写磁盘、等待网络响应),可能延迟响应
- 对 vim、nginx、redis 等程序,这是推荐的停止方式
SIGKILL(9号):强制终止,无协商余地
执行 kill -9 PID 发送 SIGKILL,作用机制完全不同:
- 内核直接终止进程,不通知用户空间代码
- 无法被阻塞、捕获或忽略,进程没有机会清理资源
- 可能导致临时文件残留(如 vim 的 .swp)、数据库未刷盘、端口未释放等问题
- 仅应在 SIGTERM 无效、进程卡死或陷入不可中断状态(D 状态)时使用
其他高频信号的实际管理用途
除了终止类信号,很多信号用于控制进程行为而非结束它:
-
SIGHUP(1号):常用于守护进程重载配置,如
kill -HUP $(pidof nginx)让 Nginx 重新读取 conf 文件而不中断服务 -
SIGSTOP(19号)与 SIGCONT(18号):暂停和恢复进程,类似作业控制中的
Ctrl+Z和fg/bg - SIGUSR1 / SIGUSR2(10/12号):留给用户自定义用途,例如某些程序用 SIGUSR1 触发日志轮转或内存快照
-
SIGINT(2号)与 SIGQUIT(3号):分别对应
Ctrl+C和Ctrl+\,前台交互式程序常用,后者还会生成 core dump(若启用)











