Java Runtime的使用
前言
最近做项目框架,需要在框架结束的时候,关闭服务器连接,清除部分框架运行lock文件,这里就想到了shutdownhook,顺便学了学Runtime的使用
1. shutdownhook
demo示例,证明在程序正常结束的时候会调用,如果kill -9 那肯定就不会调用了
public class ShutdownHookTest {public static void main(String[] args) {System.out.println("==============application start================");Runtime.getRuntime().addShutdownHook(new Thread(()->{System.out.println("--------------hook 1----------------");}));Runtime.getRuntime().addShutdownHook(new Thread(()->{System.out.println("--------------hook 2----------------");}));System.out.println("==============application end================");}
}
正常运行结束,结果如下
==============application start================
==============application end================
--------------hook 1----------------
--------------hook 2----------------Process finished with exit code 0
如果暂停,点击下图左下角的正方形红图标,停止正在运行的应用
结果如下,shutdownhook已执行。
shutdownhook可以处理程序正常结束的时候,删除文件,关闭连接等
2. exec执行
2.1 常规命令执行
demo示例如下,比如ls
public class ShutdownHookTest {public static void main(String[] args) throws InterruptedException, IOException {Process process = Runtime.getRuntime().exec("ls");try (InputStream fis = process.getInputStream();InputStreamReader isr = new InputStreamReader(fis);BufferedReader br = new BufferedReader(isr)) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}}}
}
结果如下
而正常执行结果
但是这个方法有远程执行风险,即在浏览器端通过这个方法执行特定指令,比如执行rm -rf *,结果就很……
2.2 管道符
但是遇见管道符之后就会失效,什么办法解决,sh -c,但是不能直接用,否则获取到的是TTY窗口信息
public static void main(String[] args) throws IOException {Process process = Runtime.getRuntime().exec("sh -c ps aux|grep java");try (InputStream fis = process.getInputStream();InputStreamReader isr = new InputStreamReader(fis);BufferedReader br = new BufferedReader(isr)) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}}}
结果
Java Runtime的使用相关推荐
- 电脑版java运行条件,Java Runtime Environment电脑版-Java Runtime Environment(Java运行环境)8.0.221 x64正式版-蜻蜓手游网...
很多时候我们运行一些软件都提示需要装Java环境,比如本站的<apk傻瓜式改包工具>,也是需要jdk环境才能正常使用的,但是现在官网需要注册账户才能下载,非常的麻烦,今天小编就为大家带来最 ...
- JDBC 此驱动程序不支持 Java Runtime Environment (JRE) 1.6 版
错误描述:此驱动程序不支持 Java Runtime Environment (JRE) 1.6 版.请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库. 微软描述:http://msd ...
- A Java Runtime Environment (JRE) or Java Development Kit (JDK)
启动eclipse遇到的问题: A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in ...
- java runtime environment 官网_Java Runtime Environment SE Development Kit
Java 2平台标准版(J2SE)软件是当今开发和发布急需的企业级应用的首选方案.1.4版在Java的跨平台性和高安全性的基础上,增加了很多新的特性和功能,提供了更高的性能.可规划性.稳定性和服务能力 ...
- a java runtime envi_认识java
一:垃圾收集机制 垃圾收集的目的在除不再使用的对象,当对象建立的时候垃圾收集期,即开始监控对象的动态情况,垃圾收集主要是对内存的释放.创建对象的时候申请一个空间 1:不再使用的内存空间回收: 2:Ja ...
- Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'错误的解决
运行java.exe 出现Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'错误 以前就出现过,觉得自己环 ...
- This application requires Java Runtime Environment
为什么80%的码农都做不了架构师?>>> 安装freemind后,运行时提示"This application requires Java Runtime Envir ...
- 报 There is insufficient memory for the Java Runtime Environment to continue. 的问题
There is insufficient memory for the Java Runtime Environment to continue - valar-dohaeris - 博客园
- 安装JDK出现问题 Error opening registry key'software\Javasoft\Java Runtime Environment'
第一次安装JDK测试是否安装成功,打开cmd输入java -version 回车的时候出现如下错误: Error opening registry key'software\Javasoft\Java ...
- Linux 下报错:A Java RunTime Environment (JRE) or Java
2019独角兽企业重金招聘Python工程师标准>>> 一.报错环境: 在Linux mint下,前几天还用得很好的的eclipse,今天开机不知为什么这样. Eclipse 3.6 ...
最新文章
- php程序应用实例,PHP教程.应用实例1_php
- PHP 一键安装扩展的程序-(Windows 系统)
- 多线程与高并发(四):LockSupport,高频面试题,AQS源码,以及源码阅读方法论
- 【开源项目】特斯拉+树莓派实现车牌识别检测系统
- lightgbm 数据不平衡_不平衡数据下的机器学习(下)
- LeetCode 755. 倒水(模拟)
- 接口测试很难吗?教你用Postman实用代码实现时间戳加密
- MySQL索引类型及创建
- WPF备忘录(7)WPF图片资源路径介绍
- zkeposx消费管理系统mysql_ZKEposx消费管理系统
- python模拟手机app签到_Python实现云之家自动签到
- CE教程:植物大战僵尸(单卡片无CD)
- 如何记录流水账,打开图表查看账目
- VGG16网络结构与代码
- UML---构件图和部署图
- 搜pos不为了收单而收单,互联网是个神奇的动物
- 欣赏的心态去发现生活中的美
- Hi3519V101 Linux开发环境
- 揭秘如何搭建梦幻西游社交框架
- 嵌入式系统开发笔记89:认识AVR微控制器系统架构