Java Runtime的使用详解

网友投稿 271 2022-09-09


Java Runtime的使用详解

目录前言1. shutdownhook2. exec执行2.1 常规命令执行2.2 管道符2.3源码分析3. 总结

前言

最近做项目框架,需要在框架结束的时候,关闭服务器连接,清除部分框架运行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);

}

}

}

结http://果


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:OSPF+NSSA+IP地址汇总实验案例(ospf的nssa区域)
下一篇:ACL配置(pegnacl配置)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~