Java выполняет команду, но значение не возвращается - PullRequest
1 голос
/ 27 февраля 2020

PHP вызывает сценарий оболочки, а сценарий оболочки вызывает cronjob на другом сервере.

В настоящее время я преобразовываю те же бизнес-логи c в Java.

* 1004. * Однако, поскольку мы разрабатываем с использованием Java «Runtime», cronjob этого сервера сообщает (defunct)

WaitFor() Веб-экран также постоянно ожидает метод

Что мне делать?

screenshot

public Map execCommand(String... str) {
    Map<Integer, String> map = new HashMap<>();
    ProcessBuilder pb = new ProcessBuilder(str);
    pb.redirectErrorStream(true);
    Process process = null;
    try {
        process = pb.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

    BufferedReader reader = null;
    if (process != null) {
        reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    }

    String line;
    StringBuilder stringBuilder = new StringBuilder();
    try {
        if (reader != null) {
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line).append("\n");
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        if (process != null) {
            process.waitFor();
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    if (process != null) {
        map.put(0, String.valueOf(process.exitValue()));
    }

    try {
        map.put(1, stringBuilder.toString());
    } catch (StringIndexOutOfBoundsException e) {
        if (stringBuilder.toString().length() == 0) {
            return map;
        }
    }
    return map;
}

1 Ответ

0 голосов
/ 27 февраля 2020

Чтение из входного потока после waitFor().

...