linux 退出java,linux kill命令下如何优雅的退出java程序
实现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程序相关推荐
- Linux脚本编程:sudo命令下设置定时任务
Linux脚本编程:sudo命令下设置定时任务 题目要求 编程平台 本地 云端 代码实现 基本思路 解决脚本 其他说明 题目要求 让普通用户使用sudo命令编写一个脚本,脚本内容为:设置定时任务,每隔 ...
- linux emacs使用教程,在ubuntu下使用emacs编写C语言程序
在学习Programming in C的第二遍,我在虚拟机中安装了ubuntu系统,在其中用文本编辑器emacs来写程序,这是我的开始. 在ubuntu中用emacs来写程序,首先我们得先一步一步来, ...
- java读取文件夹下的所有txt文件,java读取文件夹下文件及txt内容
public class PositionController { // 读取txt内容 public static String txt2String(File file) { StringBuil ...
- Java里面jvr,寻找下一个结点 牛客网 程序员面试金典 C++ java Python
寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...
- 退出mysql服务器的命令,mysql的登陆和退出命令格式
mysql登陆的命令格式为: 1.普通登陆mysql数据库 命令格式:mysql -u 用户名 -p 密码,例如: mysql -u root -p root 如果在-p后没有提供密码,则会在执行命令 ...
- java关闭文本_如何更优雅的关闭java文本、网络等资源
通常在 java 中对文本.网络资源等操作起来是很繁杂的,要声明,读取,关闭三个阶段,还得考虑异常情况.假设我们要读取一段文本显示到控制台,通常会有如下的代码: public static void ...
- linux下kil命令l,linux/centos下使用kill命令的使用教程方法
kill命令 kill命令用来删除执行中的程序或工作.kill可将指定的信息送至程序.预设的信息为SIGTERM(15),可将指定程序终止.若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删 ...
- Linux 系统中kill命令杀死进程常用技巧
前言 在Linux的系统中,kill是我们最常见的命令之一. kill,英语中为杀死的意思,顾名思义,就是用来杀死一些东西的命令,在linux中就是用来杀死系统中的进程. 在Windows系统中,如果 ...
- linux命令中强杀进程,Linux 系统中kill命令杀死进程常用技巧
目录 前言 基础 进阶 1 查找进程号的方式进行改进 2 将常规的两步杀死进程合并为一步 3 强制踢掉登陆用户 kill的注意事项 前言 在Linux的系统中,kill是我们最常见的命令之一. kil ...
最新文章
- 不再受限于数据集和硬件,下一代 ML 软件如何构建?
- Spring注入service为null另类解决办法 工具类 一般类 静态 非controller
- 如何形成欧姆接触_Y5T307 半导体激光器欧姆接触,以及欧姆接触与肖特基接触的区别...
- Day14作业 二、有两个List集合怎么取两个无重复的并集
- 设置RDLC中table控件的表头在每页显示
- 查看Linux内核版本、系统版本命令
- 2012年CISSP考试时间
- ImageIO 框架详细解析
- 测试用例综合设计方法
- UI设计干货素材|聊天APP界面,临摹学习进步快
- 学python买什么书-想学python看哪些书
- Your branch is ahead of ‘origin/main‘ by 1 commit.
- 《为学》 [清]彭端淑
- 局域网和内网?系统远程桌面和内网远程软件?
- 音频信号的基波和谐波介绍
- css视频教程面试题,前端基础面试题(CSS类)
- P001【项目一】客户信息管理软件_Customer类(2)
- java中的LinkedList(链表)与ArrayList(动态数组):(1)简单辨析
- QQ2012[QQ圈子]功能试用:按照真实生活将好友分圈
- MCU VR 應用班 翻轉式課堂
热门文章
- 建行计算机招聘考试考什么,银行招聘考试考什么
- python的浮点数_Python中整数和浮点数
- oracle未获得监听器,无监听文件listener.ora的动态监听小例试验
- 为什么把devc++上的程序发到qq_微信上能登陆QQ了!腾讯QQ小程序使用体验
- C语言之*和++、--连用时的结合性探究
- spss和python stata matlab_(SPSS,Matlab,stata,Python)相关性?
- connection url mysql,JDBC 连接MySQL实例详解
- python的turtle画小人_Pythonturtle画图库画姓名实例
- js 网页提示框 html文本框,页面版文本框智能提示JS代码
- php批量解析json,封装php类批量解析css成json格式_html/css_WEB-ITnose