浅析Java执行外部命令的几个要点(2)——如何支持Timeout

本文介绍如何在Java中处理外部命令执行的超时问题。通过自定义`CommandExec`类,利用`Runtime.exec()`方法并设置超时限制,当超过设定时间,程序会强制终止并记录错误日志。代码示例展示了如何创建和使用这个类来执行带有超时控制的外部命令。
摘要由CSDN通过智能技术生成

转贴请注明出处:http://blog.csdn.net/froole

用Java执行外部命令非常简单,只要在带入参数的时候注意不要把参数弄错就可以了。
但是,在实际运用中,还有一个比较棘手的问题,就是外部命令执行的timeout。
特别是执行时间比较长的外部命令,如外部的后台处理程序。
当执行这些程序的时候不可能任由他们随便跑,大多数时候,都要事先设定一个外部命令的最大执行时限,也就是timeout,如果超过这个时间程序还没有执行完成,那么将强制杀死程序,并输出错误日志。
JDK的外部执行API没有提供设定timeout的接口,所以,实现此功能,只能自行解决。

在判断执行结果的时候,将会一直对Process的返回值进行判断,前面的部分已经介绍了Process的使用特点,这里将不再重复,只放出代码,如下:

  1. import java.io.File;
  2. import java.io.IOException;
  3. /**
  4.  * 支持timeout的执行外部命令的类定义。<br>
  5.  *
  6.  * @version 1.0
  7.  * @author hao_shunri
  8.  * @see http://blog.csdn.net/froole
  9.  */
  10. public class CommandExec {
  11.     /**
  12.      * 用来执行外部命令的{@link Runtime}实现
  13.      */
  14.     private Runtime runtime;
  15.     /**
  16.      * 默认确认timeout的间隔时间,単位:毫秒
  17.      */
  18.     private static final int DEFAULT_TIMEOUT_INTERVAL = 500;
  19.     /**
  20.      * 默认timeout
  21.      */
  22.     private static final long DEFAULT_TIMEOUT = 60 * 1000;
  23.     /**
  24.      * Timout时间,単位:毫秒
  25.      */
  26.     private long timeout
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值