为什么不推荐使用 kill -9 命令来终止进程
发布网友
发布时间:2024-10-08 12:05
我来回答
共1个回答
热心网友
时间:2024-10-08 12:36
国庆期间,和同学们聚餐时,有人抱怨公司规定,称在生产环境使用 kill -9 命令被罚款2000元。本文将探讨为何许多公司不推荐使用 kill -9 命令,甚至禁止使用。
1、什么是 kill 命令
Linux 中的 kill 命令用于删除执行中的程序或工作。预设信息为 SIGTERM(15),可终止指定程序。若无法终止,可使用 SIGKILL(9) 信息强制删除。程序或工作编号可通过 ps 或 jobs 指令查看。
1.1、语法
参数信息:
常用信号:
例如:杀掉 pid 为 1111 的进程,可以使用 kill 1111 或 kill -15 1111。
1.2、kill -9 与 kill -15 的区别
kill -9 pid:杀死进程;
kill -15 pid:终止进程;
例如:你正在码字,对象叫你去晾衣服,你回答“好的,等写完就去”,这相当于 kill -15 pid 的执行过程。收到信号后,不是立即结束,而是先处理完剩余工作。而 kill -9 pid 就是你对象叫你去晾衣服,你立即去晾衣服,即收到信号后立即结束当前工作,不计后果。
2、为什么不推荐使用 kill -9 pid 甚至禁止使用
举例:银行转账场景,小张通过银行卡还钱给小李,断电时会出现什么情况?从两个架构讨论:
2.1、单体服务架构
2.1.1、InnoDB:支持事务,无损失。
2.1.2、MyISAM:可能出现数据不一致问题,产生严重后果。
2.2、分布式架构
在分布式架构中,跨服务操作普遍,使用 kill -9 pid 停止服务可能导致数据不准确。分布式事务也存在问题,一旦发生,损失可能无法弥补。因此,不能使用 kill -9 pid 停止服务。
2.3、总结
不推荐甚至禁止使用 kill -9 pid,因为命令执行存在不确定性,滥用可能造成比删库跑路还重大的事故。
3、如何结束一个进程
结束进程应该是无后果、无危险的。以下方法可结束进程:
3.1、使用 Linux kill 命令结束进程:使用 kill -15 pid。
3.2、结束 Tomcat 服务:使用 bin 目录下的 shutdown.sh 或 shutdown.bat,配置 server.xml 文件避免端口冲突。
3.3、结束 Spring Boot 服务
3.3.1、使用 ConfigurableApplicationContext 停止服务:编写 common 注入关闭方法,Controller 测试停止效果。
3.3.2、使用 spring-boot-starter-actuator 停止服务:引入依赖,修改 application.yml 文件,使用 postman 测试。