2011-03-01 2 views
2

Мне нужно иметь возможность запускать и останавливать внешнюю программу изнутри java. Я начинаю работать отлично, но когда я его останавливаю, он убивает своего родителя. Оказывается, что процесс, который я запускаю, убивает всю свою группу процессов с помощью kill 0. Кто-нибудь знает, как сделать так, чтобы мой java-процесс не был в группе процессов дочерней программы?Измените группы процессов на Runtime.getRuntime(). Процессы exec

+0

сделать его демоном. –

+0

@Murali VP: если это ответ, ответьте как ответ. – EJP

ответ

2

Так что я думаю, есть два ответа:

1) Создать свой дочерний процесс в качестве лидера группы новой группы процессов. В Linux я могу сделать это в командной строке с помощью

bash -c "command <args>" 

Затем вы можете проверить, что процесс группы нового процесса отличается от терминала вы запускали команду в командой:

ps -efj 

Параметр «j» показывает идентификатор группы процессов (PGID).

Я предупреждаю вас, что вам, возможно, придется избегать вещей, из-за которых он корректно работает с Java, потому что кавычки необходимы для команд с аргументами, которые передаются команде «bash» с опцией «-c». Таким образом, в Java я бы предположил, что это будет выглядеть примерно так:

Process processWithNewProcessGroup = Runtime.getRuntime(). 
              exec("bash -c \"sleep 60\""); 

2) Измените дочерний процесс, так что не убивает все, что в его группе процессов.

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