Как запустить полностью независимый процесс из Java-программы?

Я работаю над программой, написанной на Java, которая,для некоторых действий, запускает внешние программы, используя настроенные пользователем командные строки. В настоящее время он используетRuntime.exec() и не сохраняетProcess ссылка (запущенные программы являются либо текстовым редактором, либо утилитой архивирования, поэтому система не нуждается в потоках / out / err).

Однако есть небольшая проблема: когда программа Java завершается, она не завершается, пока не завершатся все запущенные программы.

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

Целевая операционная система является множественной, Windows, Linux и Mac являются минимальными, но любая система с графическим интерфейсом пользователя с JVM - это действительно то, что нужно (отсюда настраиваемость пользователем реальных командных строк).

Кто-нибудь знает, как заставить запущенную программу работать полностью независимо от JVM?

Редактировать в ответ на комментарий

Код запуска выглядит следующим образом. Код может запускать редактор, расположенный в определенной строке и столбце, или запускать просмотрщик архива. Значения в кавычках в сконфигурированной командной строке обрабатываются как закодированные в ECMA-262 и декодируются, а кавычки отбрасываются для формирования желаемого параметра exec.

Запуск происходит на EDT.

static Throwable launch(String cmd, File fil, int lin, int col) throws Throwable {
    String frs[][]={
        { "$FILE$"  ,fil.getAbsolutePath().replace('\\','/') },
        { "$LINE$"  ,(lin>0 ? Integer.toString(lin) : "") },
        { "$COLUMN$",(col>0 ? Integer.toString(col) : "") },
        };
    String[] arr; // array of parsed tokens (exec(cmd) does not handle quoted values)

    cmd=TextUtil.replace(cmd,frs,true,"$","$");
    arr=(String[])ArrayUtil.removeNulls(TextUtil.stringComponents(cmd,' ',-1,true,true,true));
    for(int xa=0; xa<arr.length; xa++) {
        if(TextUtil.isQuoted(arr[xa],true)) {
            arr[xa]=TextDecode.ecma262(TextUtil.stripQuotes(arr[xa]));
            }
        }
    log.println("Launching: "+cmd);
    Runtime.getRuntime().exec(arr);
    return null;
    }

Похоже, это происходит только тогда, когда программа запускается из моей IDE. Я закрываю этот вопрос, поскольку проблема существует только в моей среде разработки;это не проблема в производстве, Из тестовой программы в одном из ответов и дальнейшего тестирования, которое я провел, я удовлетворен тем, что это не проблема, с которой столкнется любой пользователь программы на любой платформе.

Ответы на вопрос(7)

Ваш ответ на вопрос