java 等待命令执行结果_Java执行命令获取结果并超时退出

最近做个功能,要用java执行命令,需要获取结果,同时也要求命令执行只能在一个固定的时间内结束,否则就应该超时退出。我想这个功能网上应该一大把吧,没必要自已写,就随便搜了一下,找到一个csdn的,下载还要三分。三分就三分吧,下来一看,居然是再起一个线程去监视执行线程。靠,浪费老子三分。干脆自已看了看api,自已搞。以下是我的实现,有需要的同学可以参考:

/**

* 命令执行

* @param cmd

* @param envs

* @param timeout

* @return

*/

private String execCMD(String cmd, String[] envs, int timeout) {

Process process = null;

StringBuilder sbStd = new StringBuilder();

StringBuilder sbErr = new StringBuilder();

long start = System.currentTimeMillis() / 1000;

try {

if (envs == null) {

process = Runtime.getRuntime().exec(cmd);

} else {

process = Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", cmd }, envs);

}

BufferedReader brStd = new BufferedReader(new InputStreamReader(process.getInputStream()));

BufferedReader brErr = new BufferedReader(new InputStreamReader(process.getErrorStream()));

String line = null;

while (true) {

if (brStd.ready()) {

line = brStd.readLine();

sbStd.append(line + "\n");

continue;

}

if (brErr.ready()) {

line = brErr.readLine();

sbErr.append(line + "\n");

continue;

}

if (process != null) {

try {

process.exitValue();

break;

} catch (IllegalThreadStateException e) {

}

}

if (System.currentTimeMillis() / 1000 - start > timeout) {

sbErr.append("\n命令执行超时退出.");

break;

}

try {

TimeUnit.MILLISECONDS.sleep(500);

} catch (InterruptedException e) {

}

}

} catch (IOException e) {

} finally {

if (process != null) {

process.destroy();

}

}

if (sbErr.length()>0) {

return sbErr.toString();

} else {

return sbStd.toString();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值