2016-06-06 2 views
0

Я хочу вызвать процесс, который не зависит от исходного процесса. Поэтому я мог использовать 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

Использование Runtime.getRuntime().exec(String[] cmdarray, String[] envp, File dir)

Из documentation

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; 
+0

Спасибо за ваш ответ! Но процесс по-прежнему является дочерним процессом оригинала, и я получаю эту ошибку: java.security.AccessControlException: Незаконный доступ группы потоков в этой строке, где я начал процесс: 'Process pr = Runtime.getRuntime(). Exec (cmdArray, null, new File ("/ home/HauptServer/Games/game1")); ' –

+0

Выполнение будет зависеть от вашего основного процесса. Некоторые вещи не могут быть изменены, как пользователь, который запускает этот процесс. У вас есть разрешение на запуск в политике безопасности? Он позволяет запускать другие процессы, а не java? – pedrofb

+0

Я не знаю .... –

 Смежные вопросы

  • Нет связанных вопросов^_^