Commons Exec 示例:自定义 ExecuteWatchdog

本文将介绍怎样通过继承 ExecuteWatchdog 来实现自定义的 ExecuteWatchdog。

废话不多说,直接上代码。

(1)自定义看门狗,如下:

import org.apache.commons.exec.ExecuteWatchdog;
import org.apache.commons.exec.Watchdog;

/**
 * 自定义看门狗
 * @author hxstrive.com 2021/12/26
 */
public class MyExecuteWatchdog extends ExecuteWatchdog {

    public MyExecuteWatchdog(long timeout) {
        super(timeout);
    }

    @Override
    public void timeoutOccured(Watchdog w) {
        super.timeoutOccured(w);
        System.out.println("我自己的看门狗");
    }

}

(2)将自定义的看门狗通过 DefaultExecutor 的 setWatchdog() 方法设置到 Commons Exec 中,如下:

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.PumpStreamHandler;
import java.io.ByteArrayOutputStream;

/**
 * 自定义看门狗,通过继承 ExecuteWatchdog 实现
 * @author hxstrive.com 2021/12/26
 */
public class WatchdogDemo2 {

    public static void main(String[] args) throws Exception {
        // 1.构建命令行
        CommandLine commandLine = new CommandLine("cmd.exe");
        commandLine.addArgument("/c");
        commandLine.addArgument("ping");
        commandLine.addArgument("www.hxstrive.com");
        commandLine.addArguments(new String[]{"-n", "20"});

        // 2.建立接收输出信息的流
        // 接收结果流
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        // 接收错误信息流
        ByteArrayOutputStream errorStream = new ByteArrayOutputStream();

        // 3.创建执行器
        DefaultExecutor executor = new DefaultExecutor();
        executor.setStreamHandler(new PumpStreamHandler(outputStream, errorStream));

        // 4.创建看门狗,5秒后自动结束进程
        // 进程的超时时间(以毫秒为单位),一定是大于 0 或 'INFINITE_TIMEOUT'
        MyExecuteWatchdog watchdog = new MyExecuteWatchdog(5000);
        executor.setWatchdog(watchdog);

        // 5.执行命令
        executor.execute(commandLine);

        // 6.输出结果
        System.out.println(outputStream.toString("GBK"));
        System.out.println(errorStream.toString("GBK"));
    }

}

运行程序,输出如下:

我自己的看门狗
Exception in thread "main" org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
	at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:404)
	at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166)
	at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:153)
	at com.hxstrive.exec.watchdog.WatchdogDemo2.main(WatchdogDemo2.java:38)
尺有所短;寸有所长。物有所不足;智有所不明。——屈原《卜居》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号