千家信息网

怎么理解kill命令

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"怎么理解kill命令",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解kill命令"吧!kill 命令我们都知道,想要在 Linux
千家信息网最后更新 2026年11月01日怎么理解kill命令

本篇内容主要讲解"怎么理解kill命令",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解kill命令"吧!

kill 命令

我们都知道,想要在 Linux 中终止一个进程有两种方式,如果是前台进程可以使用 Ctrl+C 键进行终止;如果是后台进程,那么需要使用kill命令来终止。(其实 Ctrl+C 也是 kill 命令)

kill 命令的格式是:

kill[参数][进程号] 如:  kill 21121  kill -9 21121

其中[参数]是可选的,进程号可以通过 jps/ps/pidof/pstree/top 等工具获取。

kill 的命令参数有以下几种:

-l 信号,若果不加信号的编号参数,则使用"-l"参数会列出全部的信号名称 -a 当处理当前进程时,不限制命令名和进程号的对应关系 -p 指定kill 命令只打印相关进程的进程号,而不发送任何信号 -s 指定发送信号 -u 指定用户

通常情况下,我们使用的 -l(信号)的时候比较多,如我们前文提到的 kill -9 中的 9 就是信号。

信号如果没有指定的话,默认会发出终止信号(15)。常用的信号如下:

HUP 1 终端断线 INT 2 中断(同 Ctrl + C) QUIT 3 退出(同 Ctrl + \) TERM 15 终止 KILL 9 强制终止 CONT 18 继续(与STOP相反, fg/bg命令) STOP 19 暂停(同 Ctrl + Z)

比较常用的就是强制终止信号:9 和终止信号:15,另外,中断信号:2 其实就是我们前文提到的 Ctrl+C 结束前台进程。

那么,kill -9 和 kill -15 到底有什么区别呢?该如何选择呢?

kill -9 和 kill -15 的区别

kill 命令默认的信号就是 15,首先来说一下这个默认的 kill -15 信号。

当使用 kill -15 时,系统会发送一个 SIGTERM 的信号给对应的程序。当程序接收到该信号后,具体要如何处理是自己可以决定的。

这时候,应用程序可以选择:

  • 立即停止程序

  • 释放响应资源后停止程序

  • 忽略该信号,继续执行程序

因为 kill -15 信号只是通知对应的进程要进行"安全、干净的退出",程序接到信号之后,退出前一般会进行一些"准备工作",如资源释放、临时文件清理等等,如果准备工作做完了,再进行程序的终止。

但是,如果在"准备工作"进行过程中,遇到阻塞或者其他问题导致无法成功,那么应用程序可以选择忽略该终止信号。

这也就是为什么我们有的时候使用 kill 命令是没办法"杀死"应用的原因,因为默认的 kill 信号是 SIGTERM(15),而 SIGTERM(15) 的信号是可以被阻塞和忽略的。

和 kill -15 相比,kill -9 就相对强硬一点,系统会发出 SIGKILL 信号,他要求接收到该信号的程序应该立即结束运行,不能被阻塞或者忽略。

所以,相比于 kill -15 命令,kill -9 在执行时,应用程序是没有时间进行"准备工作"的,所以这通常会带来一些副作用,数据丢失或者终端无法恢复到正常状态等。

Java 是如何处理 SIGTERM(15) 的

我们都知道,在 Linux 中,Java 应用是作为一个独立进程运行的,Java程序的终止运行是基于 JVM 的关闭实现的。

JVM 关闭方式分为三种:

  • 正常关闭:当最后一个非守护线程结束或者调用了 System.exit 或者通过其他特定平台的方法关闭(接收到 SIGINT(2)、SIGTERM(15)信号等)

  • 强制关闭:通过调用 Runtime.halt 方法或者是在操作系统中强制 kill(接收到 SIGKILL(9) 信号)

  • 异常关闭:运行中遇到 RuntimeException 异常等。

JVM 进程在接收到 kill -15 信号通知的时候,是可以做一些清理动作的,比如删除临时文件等。

当然,开发者也是可以自定义做一些额外的事情的,比如让 Tomcat 容器停止,让 Dubbo 服务下线等。

而这种自定义 JVM 清理动作的方式,是通过 JDK 中提供的 shutdown hook 实现的。

JDK 提供了 Java.Runtime.addShutdownHook(Thread hook) 方法,可以注册一个 JVM 关闭的钩子。

例子如下:

package com.hollis;   public class ShutdownHookTest {       public static void main(String[] args) {          boolean flag = true;          Runtime.getRuntime().addShutdownHook(new Thread(() -> {              System.out.println("hook execute...");          }));           while (flag) {              // app is runing          }           System.out.println("main thread execute end...");      }  }

执行命令:

➜ jps  6520 ShutdownHookTest  6521 Jps  ➜ kill 6520

控制台输出内容:

hook execute...  Process finished with exit code 143 (interrupted by signal 15: SIGTERM)

可以看到,当我们使用 kill(默认 kill -15)关闭进程的时候,程序会先执行我注册的 shutdownHook,然后再退出,并且会给出一个提示:interrupted by signal 15: SIGTERM。

如果我们执行命令 kill -9:

➜ kill -9 6520

控制台输出内容:

Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

可以看到,当我们使用 kill -9 强制关闭进程的时候,程序并没有执行 shutdownHook,而是直接退出了,并且会给出一个提示:interrupted by signal 9: SIGKILL。

到此,相信大家对"怎么理解kill命令"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

信号 命令 进程 程序 参数 时候 应用 强制 内容 就是 方法 准备 工作 运行 应用程序 方式 系统 选择 阻塞 前台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 互联网科技的 广州互联网科技公司 嘟嘟瓜互联网科技 浩特互联网科技 互联网科技大会案例 西藏七维空间互联网科技有限公司 新华互联网科技2019 浙南科技城互联网大厦建设工程 伊宁互联网科技做什么的 美国互联网科技公司 21世纪互联网科技成就 山东大美朱楼互联网科技有限公司 萌小萌互联网科技河南有限公司 江苏互联网智能科技产品出厂价 上海万顺科技互联网有限公司招聘 互联网科技对化妆品行业 亚光科技低轨卫星互联网 互联网对科技影响 互联网科技大会大佬 深圳市人人互联网科技有限公司 工业互联网科技新基建 互联网科技未来 有马互联网科技 致骋互联网科技 掌上梦互联网科技 科技互联网创业计划书 南平创想时代互联网科技有限公司 未来五年的互联网科技 工业互联网山东科技大学
0