返回顶部
首页 > 资讯 > 前端开发 > html >怎么理解kill命令
  • 183
分享到

怎么理解kill命令

2024-04-02 19:04:59 183人浏览 独家记忆
摘要

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

本篇内容主要讲解“怎么理解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命令”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么理解kill命令

本文链接: https://lsjlt.com/news/84987.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么理解kill命令
    本篇内容主要讲解“怎么理解kill命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解kill命令”吧!kill 命令我们都知道,想要在 Linux 中终...
    99+
    2024-04-02
  • kill命令详解kill -9、kill -15区别
    kill相当于赐死,kill -9相当于斩立决 kill命令默认的信号就是15,也就是 kill -15 从help中可以清晰的看到 -n 指的是 信号编号 kill -l(查看Linux/Unix的信号变量)  3.说一下SIGKI...
    99+
    2023-09-08
    linux 运维 服务器
  • Linux中kill命令怎么用
    这篇文章将为大家详细讲解有关Linux中kill命令怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux kill 命令用于删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为...
    99+
    2023-06-28
  • Linux中的kill命令怎么用
    这篇文章主要为大家展示了“Linux中的kill命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中的kill命令怎么用”这篇文章吧。Kill命令和信号当你执行一个"k...
    99+
    2023-06-16
  • Linux的kill命令怎么使用
    本篇内容介绍了“Linux的kill命令怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux常用命令kill命令主要用于发送信号...
    99+
    2023-06-28
  • Linux常用命令kill怎么用
    这篇文章主要介绍Linux常用命令kill怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux常用命令kill 命令用于删除执行中的程序或工作,kill 可将指定的信息送至程序。预设的信息为 SIGTERM...
    99+
    2023-06-28
  • 关于MySql的kill命令详解
    目录mysql的kill命令一、收到 kill 以后,线程做什么?二、另外两个关于客户端的误解1、如果库里面的表特别多,连接就会很慢。2、加–quick(或者简写为 -q) 参数,也可以跳过这个阶段三、总结M...
    99+
    2023-05-16
    MySql 命令 MySql kill命令
  • linux中kill命令杀不掉进程怎么解决
    本篇内容主要讲解“linux中kill命令杀不掉进程怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux中kill命令杀不掉进程怎么解决”吧!解决方法:1、进入到“/proc/进程号...
    99+
    2023-06-29
  • Linux中mkdir、tar和kill命令怎么用
    这篇文章主要介绍Linux中mkdir、tar和kill命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 假设你要创建一个类似于下面很长的/复杂的目录树。实现这最有效的方法是什么呢?类似下面要实现的目录树...
    99+
    2023-06-16
  • Linux系统kill命令怎么杀死进程
    这篇文章的内容主要围绕Linux系统kill命令怎么杀死进程进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!当我们打开一个程序然后突然程序会锁死、停止...
    99+
    2023-06-28
  • Linux中Kill命令的进程调度该如何理解
    这篇文章主要为大家分析了Linux中Kill命令的进程调度该如何理解的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Linux中Kill命令的进程调度该如何理...
    99+
    2023-06-28
  • linux kill命令的使用方法
    这篇文章主要讲解了“linux kill命令的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux kill命令的使用方法”吧!由于职责的要求,你不得不费力地阅读那些令你感到费解...
    99+
    2023-06-13
  • Linux 的kill命令有哪些呢
    本篇文章为大家展示了Linux 的kill命令有哪些呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭。在Linux(还有...
    99+
    2023-06-16
  • Day896.MySql的kill命令 -MySQL实战
    MySql的kill命令 Hi,我是阿昌,今天学习记录的是关于MySql的kill命令的内容。 在 MySQL 中有两个 kill 命令: 一个是 kill query + 线程 id,表示终止这个线...
    99+
    2023-09-06
    mysql linux 数据库
  • Linux怎么正确使用kill命令杀死进程
    这篇文章给大家分享的是有关Linux怎么正确使用kill命令杀死进程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是L...
    99+
    2023-06-27
  • Linux中怎么通过kill命令杀死指定进程
    这篇文章将为大家详细讲解有关Linux中怎么通过kill命令杀死指定进程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一  杀死指定进程现知道有一个curl线程正在运行,需要杀死anggang@...
    99+
    2023-06-12
  • 详解MySQL kill 指令的执行原理
    kill 指令有两种写法 " kill query + 线程 id "、" kill connection(可缺省) + 线程 id "。分别表示关闭指定线程正在执行的语句、断开指定线程...
    99+
    2022-05-27
    MySQL kill MySQL 指令
  • 如何在linux中使用kill命令
    本篇文章给大家分享的是有关如何在linux中使用kill命令,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Linux kill 命令使用详解 功能说明:删除执行中的程序或工作。...
    99+
    2023-06-13
  • 怎么理解Linux netstat命令
    怎么理解Linux netstat命令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状...
    99+
    2023-06-16
  • Mysql如何使用kill命令解决死锁问题
    这篇文章给大家介绍Mysql如何使用kill命令解决死锁问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在使用mysql运行某些语句时,会因数据量太大而导致死锁,没有反映。这个时候,...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作