process.waitFor (timeout, timeUnit) не завершает процесс после указанного времени - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь выполнить визуальный базовый c код скрипта в моем java приложении с помощью компоновщика процессов. Поскольку предоставленный пользователем скрипт может не завершить sh его выполнение во времени, я хочу предоставить средства для ограничения этого времени выполнения. В следующем коде вы можете увидеть мою логику c, но на самом деле она не выполняет то, что должна делать. Как я могу заставить это ожидание работать, чтобы ограничить время выполнения?

private void run(String scriptFilePath) throws ScriptPluginException {
BufferedReader input = null;
BufferedReader error = null;

try {

    ProcessBuilder p = new ProcessBuilder("cscript.exe", "//U", "\"" + scriptFilePath + "\"");

    String path = "";

    if (scriptFilePath.indexOf("/") != -1) {
        path = scriptFilePath.substring(0, scriptFilePath.lastIndexOf("/"));
    }

    path += "/" + "tempvbsoutput.txt";
    p.redirectOutput(new File(path));
    Process pp = p.start();

    try {
        pp.waitFor(executionTimeout, TimeUnit.MINUTES);     
    } catch (InterruptedException e) {
        SystemLog.writeError(jobId, ScriptConsts.COMPONENT_ID, "VBScriptExecutor", "run", 80401104,
                "VB Script executes fail.");
    } 

    if (!pp.isAlive()) {
        pp.getOutputStream().close();
    }

    // rest of the code flow 

}

1 Ответ

5 голосов
/ 17 января 2020

Process.waitFor(long, TimeUnit) ожидает завершения процесса или истечения указанного времени ( Javado c). Возвращаемое значение указывает, завершился ли процесс или нет.

if (process.waitFor(1, TimeUnit.MINUTES)) {
    System.out.println("process exited");
} else {
    System.out.println("process is still running");
}

waitFor() не завершает процесс после истечения времени.

Если вы хотите уничтожить подпроцесс, используйте либо destroy () или destroyForcbly () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...