Я хочу вызвать процесс, который не зависит от исходного процесса. Поэтому я мог использовать Runtime. Runtime.getRuntime().exec("java -Xms256M -Xmx256M -jar /home/HauptServer/Games/game1/cloud.jar -p "+port)
, но это не установит рабочий каталог. Поэтому я использовал ProcessBuilder, попробовал это: ProcessBuilder prb = new ProcessBuilder("java","-Xms256M","-Xmx256M","-jar","cloud.jar","-p",""+port).directory(new File("/home/HauptServer/Games/game1"));
, но в этом случае он не работает независимо от моего исходного процесса. У вас есть решения?Как создать независимый процесс с ProcessBuilder или установить рабочий каталог с помощью exec()
0
A
ответ
0
Использование Runtime.getRuntime().exec(String[] cmdarray, String[] envp, File dir)
Executes the specified command and arguments in a separate process with the specified environment and working directory.
Не используйте команду однолинейная (java -jar ...
). Используйте cmdarray[]
и указать на dir
в рабочем каталоге
Пример
String cmdArray[] = new String[7];
cmdArray[0] = "java";
cmdArray[1] = "-Xms256M";
cmdArray[2] = "-Xmx256M";
cmdArray[3] = "-jar";
cmdArray[4] = "/home/HauptServer/Games/game1/cloud.jar";
cmdArray[5] = "-p";
cmdArray[6] = port;
Спасибо за ваш ответ! Но процесс по-прежнему является дочерним процессом оригинала, и я получаю эту ошибку: java.security.AccessControlException: Незаконный доступ группы потоков в этой строке, где я начал процесс: 'Process pr = Runtime.getRuntime(). Exec (cmdArray, null, new File ("/ home/HauptServer/Games/game1")); ' –
Выполнение будет зависеть от вашего основного процесса. Некоторые вещи не могут быть изменены, как пользователь, который запускает этот процесс. У вас есть разрешение на запуск в политике безопасности? Он позволяет запускать другие процессы, а не java? – pedrofb
Я не знаю .... –