Linux中如何优雅地区分使用kill-9和kill-15关闭进程的最佳实践是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计965个文字,预计阅读时间需要4分钟。
在以下操作中,优先使用`kill -15`,只有在其失效时才使用`kill -9`。否则,可能会丢失数据、锁定或损坏文件。
为什么 kill -15 是默认且推荐的关闭方式
kill -15 发送的是 SIGTERM 信号,本质是“礼貌请求”进程自行退出。程序收到后可以:
- 执行自定义清理逻辑(比如 Java 应用关闭线程池、Spring 关闭 Bean 生命周期)
- 保存未刷盘的数据(如数据库事务日志、缓存快照)
- 释放文件描述符、网络连接、互斥锁等系统资源
- 等待正在处理的请求完成(例如 Nginx 正在响应的 HTTP 请求)
但注意:SIGTERM 可被进程忽略、阻塞或延迟响应——比如进程卡在不可中断的 IO(D 状态)、死循环、或信号处理器写错了。此时 kill -15 就会“没反应”。
什么情况下必须用 kill -9?又为什么它很危险
kill -9 发送 SIGKILL,由内核直接回收进程,绕过所有用户态代码。
本文共计965个文字,预计阅读时间需要4分钟。
在以下操作中,优先使用`kill -15`,只有在其失效时才使用`kill -9`。否则,可能会丢失数据、锁定或损坏文件。
为什么 kill -15 是默认且推荐的关闭方式
kill -15 发送的是 SIGTERM 信号,本质是“礼貌请求”进程自行退出。程序收到后可以:
- 执行自定义清理逻辑(比如 Java 应用关闭线程池、Spring 关闭 Bean 生命周期)
- 保存未刷盘的数据(如数据库事务日志、缓存快照)
- 释放文件描述符、网络连接、互斥锁等系统资源
- 等待正在处理的请求完成(例如 Nginx 正在响应的 HTTP 请求)
但注意:SIGTERM 可被进程忽略、阻塞或延迟响应——比如进程卡在不可中断的 IO(D 状态)、死循环、或信号处理器写错了。此时 kill -15 就会“没反应”。
什么情况下必须用 kill -9?又为什么它很危险
kill -9 发送 SIGKILL,由内核直接回收进程,绕过所有用户态代码。

