1

我正在使用 Apache exec 库调用 java 进程。如果进程被强制停止(使用任务管理器或其他方式),我需要做一些操作。exec 库中是否有任何可用选项?我在 ResultHandler 中发现了一个 waitfor() 操作,它正在忙着等待。有没有可用的通知机制?

4

2 回答 2

0

我希望退出状态能够反映进程是否被强制终止。

请参阅教程,特别是参考您的评论,本节:

您的工作线程将阻塞,直到打印过程完成或被看门狗杀死。因此,异步执行打印作业就可以了。在此示例中,我们创建了一个“ExecuteResultHandler”实例并将其传递给“Executor”实例,以便异步执行流程。“resultHandler”获取任何有问题的异常或进程退出代码

于 2012-10-18T09:42:05.797 回答
0

很久以前就有人问过这个问题,但我今天偶然发现了它...

这是解决方案:您只需设置一个ExecuteResultHandler并将其传递给execute 方法。然后不涉及主动等待。像这样:

DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler() {
    @Override
    public void onProcessComplete(int exitValue) {
        super.onProcessComplete(exitValue);
        log.info("Process finished");
    }

    @Override
    public void onProcessFailed(ExecuteException e) {
        super.onProcessFailed(e);
        log.info("Process failed miserably");
    }
};

String process = "C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroRd32.exe";
CommandLine cmdLine = new CommandLine(process);
cmdLine.addArgument("C:\\Users\\francois.marot\\Downloads\\UtiliserLesDernieres DLL.pdf");

DefaultExecutor executor = new DefaultExecutor();
// the watchdog purpose is to kill the process after a specified timeout
SphereExecutionWatchdog watchdog = new SphereExecutionWatchdog(5000);
executor.setWatchdog(watchdog);
executor.execute(cmdLine, resultHandler);
于 2018-02-19T13:07:27.683 回答