Java: Process Builder создает зомби

Я что-то здесь не так делаю? Не обрабатываете поток правильно?

Я запускаю процесс здесь (в частности: mvn exec:java) и процесс не прекращается, даже если я запускаю p.killForcibly(),

Если я пойду в командную строку и попытаюсь taskkill /F /PID на pid, который я получаю из библиотеки flapdoodle, я получаю "доступ запрещен", и процесс продолжается.

try {
            ProcessBuilder builder = new ProcessBuilder(commands);
            log.createNewFile();
            builder.redirectErrorStream(true);
            builder.redirectOutput(Redirect.appendTo(log));

            final Process p = builder.directory(dir).start();

            Long pid = de.flapdoodle.embed.process.runtime.Processes.processId(p);
            System.out.println("pid: " + pid);

            class InnerRunner implements Runnable {
                public void run() {
                    try {
                        int rc = p.waitFor();
                        if (callback != null)
                            callback.onComplete(rc);
                    } catch (InterruptedException ie) {
                        throw new RuntimeException("process was interuppted", ie);
                    }
                }
            }
            Thread t = new Thread(new InnerRunner());
            return p;
        } catch (IOException ioe) {
            throw new RuntimeException      ("Failed to run process: " + commands + ".  Ran it in: " + dir.getAbsolutePath(), ioe); 
        } catch (Throwable t) {
            throw new RuntimeException("err", t);
        }
Thread t = new Thread(new InnerRunner());

Возможная подсказка: выходной файл журнала, на который я перенаправляю вывод процессов, все еще остается открытым процессом. Я не могу удалить его, пока не убью процесс в диспетчере задач.

0 ответов

Другие вопросы по тегам