Kill命令在Java里面详解(kill命令使用)

createh54个月前 (02-01)技术教程29

Kill -9 不能乱用

kill命令经常使用,并且还经常使用kill -9。

之前面试也有被问kill -3和kill -9的区别是什么。

直到今天看了Hillos的我到服务器执行kill -9后,就被通知第二天别来了!这篇文章,才意识到之前的粗心大意,没有深入的研究就胡乱使用会产生很严重的后果。

只能庆幸自己不是一个运维人员,没有在生产环境执行过kill -9这样的操作。

Kill本身

kill命令默认的信号就是15,当使用kill 进程ID时,系统会发送SIGTERM信号给Java程序,Java程序会执行shutdown hook方法做一些清理任务,保证程序可以安全退出。

Kill -3

当Kill -3 进程ID时,系统会发送SIGQUIT信号给Java程序,Java程序不会停止,会打印线程快照和堆内存快照。

kill -9

当Kill -9 进程ID时,系统会发送SIGKILL信号给Java程序,Java程序会立刻停止,不会执行shutdown hook方法,这样是不安全,有风险,可能会造成数据丢失等严重问题。

总结

一般应该使用kill命令,不应该使用kill -9。但是shutdown hook方法需要注意,不能有死循环等阻塞操作,如果有死循环的话,kill命令就会一直被阻塞,导致程序不能被正常中止。

public class JvmShutdown {
    public static void main(String[] args) {
        boolean flag = true;
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            System.out.println("shutdown hook executing...");
            while(flag) {
                // 死循环,导致程序不能正常中止
            }
        }));

        while(flag) {
        }

        System.out.println("main thread execute end...");
    }
}

相关文章

我的世界:java vs 基岩的11个不同之处!这是,天堂传送门?

《我的世界》基岩版 vs Java版向来不是完全统一的两个版本,最为经典的差异想必也就是为人所熟知的“船”的合成配方了。然而我们今天就来聊一些更为细节的不同之处!1、基岩版的船无法承载掉落物,JAVA...

又一时代结束 甲骨文宣布将弃用Java插件

Java 插件一直被认为是系统不稳定因素的温床,它的时代即将过去。甲骨文公司宣布 Java 插件即将退出历史舞台。Java 插件不会立即死去。它将在下一个版本的 Java 开发工具包中被弃用,然后随着...

经验分享|程序员成功转行IC,我终于不用再吃“青春饭”

近期后台收到了一位同学的私信,转行IC后他的薪资涨了很多,这位同学之前是程序员,经过不断努力成功转行到IC后端。我是西安一所普通的一本毕业,学的是自动化专业,大学跟大多数人一样过得浑浑噩噩,对自己的职...

实战!如何在退出登录时借助外力使JWT令牌失效?

大家好,我是不才陈某~今天这篇文章介绍一下如何在修改密码、修改权限、注销等场景下使JWT失效。文章的目录如下:解决方案JWT最大的一个优势在于它是无状态的,自身包含了认证鉴权所需要的所有信息,服务器端...

Linux系统怎么后台运行jar项目和关闭jar项目的方法

Linux后台运行和关闭jar项目该怎么操作呢?下面我们来讲一下!直接用下面这个命令java -jar xxx.jar当退出或关闭shell时,程序就会停止掉。以下方法可让jar运行后一直在后台运行。...

9 OOM和JVM退出。OOM后JVM一定会退出吗?

首先我们把两个概念讲清楚OOM是线程在申请堆内存,发现堆内存空间不足时候抛出的异常。JVM退出的条件如下:java虚拟机在没有守护线程的时候会退出。守护线程是启动JVM的线程,服务于用户线程。我们简单...