java调用linux脚本
来源:互联网 发布:合肥cnc编程招聘 编辑:程序博客网 时间:2024/06/05 14:55
有时候要使用Java调用linux脚本,且需要设置超时时间,以下是我封装的简单的类:
超时使用Thread.join(time)来实现。
public class ProcessUtils {/** * @parma taskName 任务名 * @param processName 进程名 * @param cmd * @param timeout * 超时时间,如果为0则表示永远不超时 * @return */public static boolean execute(String taskName, String processName, String[] cmd, long timeout) {BufferedReader infoReader = null;BufferedReader errorReader = null;StringBuilder errorMsg = new StringBuilder();Process process = null;TimeoutWorker worker = null;try {process = Runtime.getRuntime().exec(cmd);infoReader = new BufferedReader(new InputStreamReader(process.getInputStream()));errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));worker = new TimeoutWorker(process);worker.start();worker.join(timeout);//超时时间到或者run方法执行完成(即process.waitFor执行完成)时就会向下执行if (worker.status != null) {// info数据String line = null;while (infoReader != null&& (line = infoReader.readLine()) != null) {System.out.println(line);}// error数据while (errorReader != null&& (line = errorReader.readLine()) != null) {errorMsg.append(line).append("\n");}if (!errorMsg.toString().isEmpty()) {System.out.println(errorMsg.toString());}}else{//超时System.out.println(processName + " timeout, timeout is "+ timeout+"...");}} catch (InterruptedException e) {if (worker != null) {worker.interrupt();}Thread.currentThread().interrupt();} catch (Exception e) {e.printStackTrace();} finally {if (process != null) {process.destroy();}}return false;}/** * 用于设置超时的线程 * */private static class TimeoutWorker extends Thread {private Process process;private Integer status;public TimeoutWorker(Process process) {this.process = process;}public void run() {try {status = process.waitFor();} catch (InterruptedException e) {return;}}}}
但如ps -ef|grep tomcat的脚本用以上的方法是解决不了的,需要做一些改变,即
cmd = {"ps -ef|grep tomcat"}改成:cmd = {"/bin/sh", "-c","ps -ef|grep tomcat"}
就可以了。
网上有说:Runtime.getRuntime().exec()这种调用方式在java虚拟机中是十分消耗资源的,即使命令可以很快的执行完毕,频繁的调用时创建进程消耗十分客观。java虚拟机执行这个命令的过程是,首先克隆一条和当前虚拟机拥有一样环境变量的进程,再用这个新的进程执行外部命令,最后退出这个进程。频繁的创建对CPU和内存的消耗很大。 有空时研究下...
- java调用linux脚本
- java调用linux脚本
- 使用java调用linux脚本
- java 调用linux shell脚本
- java程序调用linux脚本
- java中调用linux命令或者脚本
- 在java中调用Linux命令/脚本
- java调用linux中的shell脚本
- linux中java调用shell脚本
- linux上java调用shell脚本
- Java调用执行linux shell脚本
- java调用Linux 命令、Shell脚本
- java调用Linux的命令或者脚本
- Linux C 调用脚本
- Linux 定时调用脚本
- Java调用Windows批处理或Linux脚本或可执行文件
- java远程调用linux的命令或者脚本
- java远程调用linux的命令或者脚本
- tags的建立和使用
- SSH登陆错误
- My97DatePicker
- 菜鸟的学习之路(10) — LinkedList类
- oracle 全线产品销售内参-13Y
- java调用linux脚本
- 探讨:3D透视投影变换详解-兼谈视平面和屏幕的宽高比问题
- 字符设备与块设备
- eclipse 快捷键大全
- Java常用类库--正则表达式(Pattern类、Matcher类)
- asp.net关闭当前窗口
- ios通过URL地址,从网络上获取图片
- static作用
- HashMap的工作原理