正确地kill java历程

www.MyException.Cn   发布于:2012-06-27 14:20:08   浏览:4次

正确地kill java进程

在linux/unix下,你会怎么中止一个java进程?
你可能会回答 kill -9 pid,这是一种在多数情况下正确的做法。不过,这种方式过于暴力,如果用户对环境不熟悉,很容易造成致命的后果。
本文将分析kill -9产生问题的原因,并给出另一种标准的kill方式。

标准中断信号

在Linux信号机制中,存在多种进程中断信号(Linux信号列表)。其中比较典型的有 SIGNKILL(9) 和 SIGNTERM(15).

SIGNKILL(9) 和 SIGNTERM(15) 的区别在于:
SIGNKILL(9) 的效果是立即杀死进程. 该信号不能被阻塞, 处理和忽略。
SIGNTERM(15) 的效果是正常退出进程,退出前可以被阻塞或回调处理。并且它是Linux缺省的程序中断信号。

由此可见,SIGNTERM(15) 才是理论上标准的kill进程信号。
那使用 SIGNKILL(9) 又有什么错呢?

SIGNKILL(9) 带来的问题

先看一段程序

/*** Shutdown Hook Presentation** @author Ken Wu*/
public class ShutdownHookTest {private static final void shutdownCallback() {System.out.println("Shutdown callback is invoked.");}public static void main(String[] args) throws InterruptedException {Runtime.getRuntime().addShutdownHook(new Thread() {@Overridepublic void run() {shutdownCallback();}});Thread.sleep(10000);}}

在上面这段程序中,我使用Runtime为当前java进程添加了一个ShutdownHook,它的作用是在java正常退出时,执行shutdownCallback()这个回调方法。
此时,如果你试验过在java进程未自动退出前,执行 kill -9 pid,即发送 SIGNKILL 信号,会发现这个回调接口是不会被执行的。这是SIGNKILL信号起的作用。

对于我这个简单的测试用例来说,不被执行也无大碍。但是,如果你的真实系统中有需要在java进程退出后,释放某些资源。
而这个释放动作,因为SIGNKILL被忽略了,那就可能造成一些问题。

所以,推荐大家使用标准的kill进程方式,即 kill -15 pid。

正确地kill java历程相关推荐

  1. linux 批量kill java进程

    linux 批量kill java进程 ps -ef |grep java |grep -v grep|awk '{print $2}'|xargs kill -9

  2. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  3. java 简单事件的使用,如何正确的使用Java事件通知(1)

    如何正确的使用Java事件通知(1) 通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易就掉进一些陷阱.本文介绍了我 ...

  4. 大四狗:我的java历程(续)

     今天在java贴吧看到一个两年前的帖子,是分享老大视频资源的帖子,点了进去看到当年自己稚嫩的回复,不禁想起两年来和易途的点点滴滴.发个帖子和大家分享下关于我的一点经历和感想.简单说一下背景:现在 ...

  5. 大四狗:我的java历程——越努力,越幸运。

    大二的时候写过一篇博客,< 作为一名计算机学院普通的大学生如何提高兴趣敲代码 >,没想到当时引起了很多同学的共鸣,有的人觉得受到了鼓舞,有的人觉得看到这篇文章已经大四,要改变也太晚了.然而 ...

  6. 骑士 java_在递归骑士之旅中正确声明变量(Java作业)

    我在学年的最后一个项目(我作为CS学生的第一年)的代码中找不到错误.在执行骑士巡回赛问题时,我一直坚持递归.这是有问题的文件: https://github.com/sheagunther/tsp16 ...

  7. 如何正确地使用Java的@deprecated标注

    没有什么事情比看到一个没有任何说明的@deprecated标注更让人愤怒的事情了.这种做法只能让人困惑,我到底还要不要用这个已经'废弃'的方法?如果开发者不希望某个方法再被人用的话,就要好好地为@de ...

  8. java核心面试_不正确的核心Java面试答案

    java核心面试 总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站. 这可能意味着错误或过时的答案可能永远不会得到纠正. 这是一些不太正确或已经过时的问题和答案. 即是Ja ...

  9. 判断输入的手机号码格式是否正确(用Java实现)

    判断输入的手机号码格式是否正确 首先我们要了解一下常见手机号码的格式. 手机号码是11为位数字,其中第一位是1,第二位可以是3.4.5.7.8中的任意一位,第三位到第十一位可以从0-9中任意选取. 本 ...

最新文章

  1. php获取日期对应的星期,PHP获取日期对应的星期
  2. Solr环境搭建及IK分词的集成及solrJ的调用(一)
  3. html页面左对齐 不换行,css如何设置不换行?
  4. Spring Boot如何优雅的校验参数
  5. only static const integral data members can be initialized within a class
  6. 【简明表】MATLAB + 矩阵运算
  7. mq3.8.9版本有什么不同_Python3.9版本新特性:字典合并操作的详细解读
  8. 22021年江苏高考成绩查询,江苏高考成绩查询系统入口
  9. WAV格式中常见的压缩编码
  10. mysqldump使用详解
  11. I2C总线协议的简要说明
  12. 赤兔oracle恢复软件 收费,赤兔Oracle数据库恢复软件下载 v11.6官方版-下载啦
  13. 三星固态驱动安装失败_三星950 Pro固态硬盘用U盘装win7失败解决教程
  14. UMD格式与解析详解
  15. IP被反垃圾邮件组织列入SBL,发送邮件被退回的解决方法
  16. 斯坦福大学自然语言处理第四课 语言模型(Language Modeling)笔记
  17. html5 canvas 椭圆,html5中怎么利用Canvas绘制椭圆
  18. CityEngine2018正版免费申请试用教程
  19. 房多多,没有拼多多的命
  20. 小程序登录 之 支付宝授权

热门文章

  1. ps -ef grep java解释,ps -ef | grep java(示例代码)
  2. rds mysql 磁盘空间,RDS MySQL 空间问题的原因和解决
  3. HDMI高清光端机产品特点及应用场合介绍
  4. [渝粤教育] 西北工业大学 机械原理 参考 资料
  5. [渝粤教育] 天津城建大学 混凝土结构设计原理A 参考 资料
  6. 国家开放大学2021春1118机电一体化系统设计基础题目
  7. LoRaWAN 巩固了其作为低功耗广域网主导技术的地位
  8. 蓝牙模块智能灯控应用方案
  9. camera.swf java_java调用摄像头保存图片上传功能
  10. 不可上位!数据结构队列,老实排队,Java实现数组模拟队列及可复用环形队列