实现SignalHandler

kill命令常用信号(之后代码会用到):HUP 1 终端断线

INT 2 中断(同 Ctrl + C)

QUIT 3 退出(同 Ctrl + \)

TERM 15 终止

KILL 9 强制终止

CONT 18 继续(与STOP相反, fg/bg命令)

STOP 19 暂停(同 Ctrl + Z)

SignalHandler实现类import sun.misc.Signal;

import sun.misc.SignalHandler;

public class KillHandler implements SignalHandler {

/**

* HUP 1 终端断线 INT 2 中断(同 Ctrl + C) QUIT 3 退出(同 Ctrl + \) TERM 15 终止 KILL 9

* 强制终止 CONT 18 继续(与STOP相反, fg/bg命令) STOP 19 暂停(同 Ctrl + Z)

*/

public static final String TERM_15 = "TERM";

public static final String QUIT_3 = "QUIT";

public void registerSignal(String signalName) {

Signal signal = new Signal(signalName);

Signal.handle(signal, this);

}

@Override

public void handle(Signal signal) {

if (signal.getName().equals(TERM_15)) {

TestThread.shutdownFlag = true;

System.out.println("shutdownFlag=true");

// System.exit(0);

} else if (signal.getName().equals(QUIT_3)) {

// TODO do something

}

}

}

main类public class TestThread {

public static boolean shutdownFlag = false;

public static void main(String[] args) {

KillHandler killHandler = new KillHandler();

killHandler.registerSignal(KillHandler.TERM_15);

int i = 0;

while (true) {

System.out.println(i);

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

i++;

if(shutdownFlag)break;

}

try {

System.out.println("main Thread sleep 5s");

Thread.sleep(1000*5);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("main Thread exit");

}

}

应用

运行main类,执行kill xxx,java程序会先执行实现类的handle方法,然后main方法运行完,释放资源,程序关闭。

ps:main类执行完才能释放资源,像while(true)这种循环必须打断才能释放资源。

linux 退出java,linux kill命令下如何优雅的退出java程序相关推荐

  1. Linux脚本编程:sudo命令下设置定时任务

    Linux脚本编程:sudo命令下设置定时任务 题目要求 编程平台 本地 云端 代码实现 基本思路 解决脚本 其他说明 题目要求 让普通用户使用sudo命令编写一个脚本,脚本内容为:设置定时任务,每隔 ...

  2. linux emacs使用教程,在ubuntu下使用emacs编写C语言程序

    在学习Programming in C的第二遍,我在虚拟机中安装了ubuntu系统,在其中用文本编辑器emacs来写程序,这是我的开始. 在ubuntu中用emacs来写程序,首先我们得先一步一步来, ...

  3. java读取文件夹下的所有txt文件,java读取文件夹下文件及txt内容

    public class PositionController { // 读取txt内容 public static String txt2String(File file) { StringBuil ...

  4. Java里面jvr,寻找下一个结点 牛客网 程序员面试金典 C++ java Python

    寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...

  5. 退出mysql服务器的命令,mysql的登陆和退出命令格式

    mysql登陆的命令格式为: 1.普通登陆mysql数据库 命令格式:mysql -u 用户名 -p 密码,例如: mysql -u root -p root 如果在-p后没有提供密码,则会在执行命令 ...

  6. java关闭文本_如何更优雅的关闭java文本、网络等资源

    通常在 java 中对文本.网络资源等操作起来是很繁杂的,要声明,读取,关闭三个阶段,还得考虑异常情况.假设我们要读取一段文本显示到控制台,通常会有如下的代码: public static void ...

  7. linux下kil命令l,linux/centos下使用kill命令的使用教程方法

    kill命令 kill命令用来删除执行中的程序或工作.kill可将指定的信息送至程序.预设的信息为SIGTERM(15),可将指定程序终止.若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删 ...

  8. Linux 系统中kill命令杀死进程常用技巧

    前言 在Linux的系统中,kill是我们最常见的命令之一. kill,英语中为杀死的意思,顾名思义,就是用来杀死一些东西的命令,在linux中就是用来杀死系统中的进程. 在Windows系统中,如果 ...

  9. linux命令中强杀进程,Linux 系统中kill命令杀死进程常用技巧

    目录 前言 基础 进阶 1 查找进程号的方式进行改进 2 将常规的两步杀死进程合并为一步 3 强制踢掉登陆用户 kill的注意事项 前言 在Linux的系统中,kill是我们最常见的命令之一. kil ...

最新文章

  1. 不再受限于数据集和硬件,下一代 ML 软件如何构建?
  2. Spring注入service为null另类解决办法 工具类 一般类 静态 非controller
  3. 如何形成欧姆接触_Y5T307 半导体激光器欧姆接触,以及欧姆接触与肖特基接触的区别...
  4. Day14作业 二、有两个List集合怎么取两个无重复的并集
  5. 设置RDLC中table控件的表头在每页显示
  6. 查看Linux内核版本、系统版本命令
  7. 2012年CISSP考试时间
  8. ImageIO 框架详细解析
  9. 测试用例综合设计方法
  10. UI设计干货素材|聊天APP界面,临摹学习进步快
  11. 学python买什么书-想学python看哪些书
  12. Your branch is ahead of ‘origin/main‘ by 1 commit.
  13. 《为学》 [清]彭端淑
  14. 局域网和内网?系统远程桌面和内网远程软件?
  15. 音频信号的基波和谐波介绍
  16. css视频教程面试题,前端基础面试题(CSS类)
  17. P001【项目一】客户信息管理软件_Customer类(2)
  18. java中的LinkedList(链表)与ArrayList(动态数组):(1)简单辨析
  19. QQ2012[QQ圈子]功能试用:按照真实生活将好友分圈
  20. MCU VR 應用班 翻轉式課堂

热门文章

  1. 建行计算机招聘考试考什么,银行招聘考试考什么
  2. python的浮点数_Python中整数和浮点数
  3. oracle未获得监听器,无监听文件listener.ora的动态监听小例试验
  4. 为什么把devc++上的程序发到qq_微信上能登陆QQ了!腾讯QQ小程序使用体验
  5. C语言之*和++、--连用时的结合性探究
  6. spss和python stata matlab_(SPSS,Matlab,stata,Python)相关性?
  7. connection url mysql,JDBC 连接MySQL实例详解
  8. python的turtle画小人_Pythonturtle画图库画姓名实例
  9. js 网页提示框 html文本框,页面版文本框智能提示JS代码
  10. php批量解析json,封装php类批量解析css成json格式_html/css_WEB-ITnose