Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当使用ApacheCommonsExec调用的进程停止时,如何获得通知?_Apache_Exec - Fatal编程技术网

当使用ApacheCommonsExec调用的进程停止时,如何获得通知?

当使用ApacheCommonsExec调用的进程停止时,如何获得通知?,apache,exec,Apache,Exec,我正在使用ApacheExec库调用一个java进程。如果进程被强制停止(使用任务管理器或其他方式),我需要执行一些操作。exec库中是否有可用的选项?我在ResultHandler中发现了一个waitfor()操作,它正在执行繁忙的等待。是否有可用的通知机制?我希望退出状态能够反映进程是否已被强制终止 请参阅本节,特别是您的评论: 工作线程将阻塞,直到打印过程完成或 被看门狗杀死了。因此,执行打印作业 异步将完成此任务。在本例中,我们创建一个 “ExecuteSultHandler”的实例,并

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

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

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

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


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

解决方案如下:您只需设置一个并将其传递给。那么就不需要主动等待了。像这样:

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);

但我还是要忙着等,对吗?有什么通知机制吗?是的。当我在while循环中为其内部调用wait时,会执行50毫秒的休眠,并检查进程是否已终止。看起来您需要一个。