我正在使用Apache exec库调用java进程。如果强制停止进程(使用任务管理器或其他方式),我需要执行一些操作。 exec库中有没有可用的选项?我在ResultHandler中找到了一个waitfor()操作,它正在进行繁忙的等待。有没有可用的通知机制?
答案 0 :(得分:0)
我希望退出状态能够反映该进程是否已被强制杀死。
请参阅the tutorial,特别是您的评论,本节:
您的工作线程将阻止,直到打印过程完成或 被看门狗杀了。因此执行打印作业 异步会做的伎俩。在这个例子中我们创建了一个 'ExecuteResultHandler'的实例并将其传递给'Executor' 实例,以便异步执行进程。该 'resultHandler'选择任何违规异常或进程退出 代码
答案 1 :(得分:0)
很久以前就问过这个问题,但我今天偶然发现了......
以下是解决方案:您只需设置ExecuteResultHandler并将其传递给execute method即可。然后没有积极的等待。像这样:
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);