Как я могу убить процесс Linux в Java с помощью SIGKILL Process.destroy () делает SIGTERM

Версия Clojure:

(defn comb [k l]
  (if (= 1 k) (map vector l)
      (apply concat
             (map-indexed
              #(map (fn [x] (conj x %2))
                    (comb (dec k) (drop (inc %1) l)))
              l))))
16
задан Martijn Courteaux 4 June 2010 в 14:54
поделиться

2 ответа

Без использования чистой Java.

Самая простая альтернатива - использовать Runtime.exec () для запуска команды kill -9 в качестве внешнего процесса.

К сожалению, получить PID не так-то просто. Вам нужно будет либо использовать черную магию отражения для доступа к полю private int pid , либо возиться с выводом команды ps .

ОБНОВЛЕНИЕ - вообще-то есть другой способ. Создайте небольшую утилиту (программу C, сценарий оболочки, что угодно), которая будет запускать реальное внешнее приложение. Запрограммируйте утилиту так, чтобы она запомнила PID дочернего процесса и настроила обработчик сигнала для SIGTERM, который будет SIGKILL дочернему процессу.

15
ответ дан 30 November 2019 в 21:10
поделиться

Стивен, его ответ правильный. Я написал то, что он сказал:

public static int getUnixPID(Process process) throws Exception
{
    System.out.println(process.getClass().getName());
    if (process.getClass().getName().equals("java.lang.UNIXProcess"))
    {
        Class cl = process.getClass();
        Field field = cl.getDeclaredField("pid");
        field.setAccessible(true);
        Object pidObject = field.get(process);
        return (Integer) pidObject;
    } else
    {
        throw new IllegalArgumentException("Needs to be a UNIXProcess");
    }
}

public static int killUnixProcess(Process process) throws Exception
{
    int pid = getUnixPID(process);
    return Runtime.getRuntime().exec("kill " + pid).waitFor();
}

Вы также можете получить pid таким образом:

public static int getPID() {
  String tmp = java.lang.management.ManagementFactory.getRuntimeMXBean().getName();
  tmp = tmp.split("@")[0];
  return Integer.valueOf(tmp);
}
11
ответ дан 30 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

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