Уничтожение процессов из Java

Я создал приложение Java, которое может запускать процессы и захватывать их PID, чтобы приложение могло контролировать процесс. Позже пользователь может решить уничтожить все дерево процессов (сеанс). Я сделал это с помощью setsid. Один сценарий запускает целую кучу разных процессов с помощью сценария оболочки: setsid <shell script>. PID представляет новый сеанс, и его уничтожение уничтожит все процессы, созданные в этом сеансе. Он прекрасно работал до выхода Ubuntu 12.10. Теперь я не могу убить все сессии, запущенные с помощью setsid. Одним из примеров является Firefox и Google Earth. Гедит все еще может быть убит, если его запустить через сетсид.

Я создал простую тестовую программу, которая выполняет kill -SIGTERM -PID. Тестовой программе удается уничтожить firefox, запущенный через setsid в Ubuntu 12.04, но не в Ubuntu 12.10. Я не знаю, что изменилось. Я выполнил программу в обоих дистрибутивах, используя OpenJDK 6, 7 и Oracle JDK 6.


public class kill
{
        public static void main(String[] args)
        {
    try 
        {
        System.out.println("kill -SIGTERM -" + args[0]);
        Process proc = Runtime.getRuntime().exec("kill -SIGTERM -" + args[0]);
        int exitVal = proc.waitFor();
        System.out.println("Exit value: " + exitVal); // often 1 under Ubuntu 12.10
        }
    catch (Exception e)
        {
        }
}

2
задан 27 November 2012 в 19:07

1 ответ

В Ubunutu 12.04 и Centos 5 + 6 можно использовать имя сигнала, например, SIGTERM, но 12.10 вместо него следует использовать -TERM. Изменение моего кода таким образом, чтобы имена сигналов не имели префикса «SIG», по-видимому, хорошо работало на 12.04 и 12.10. Итак, пример кода, который работает для меня:

Process proc = Runtime.getRuntime().exec("kill -TERM -" + args[0]);

Чтобы уточнить, kill -SIGTERM -<PID> работает в оболочке Bash в Ubuntu 12.10, но не в том случае, если она выполняется через Runtime.getRuntime.exec(), нужно удалить ' SIG 'часть, как описано выше.

0
ответ дан 27 November 2012 в 19:07

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

Похожие вопросы: