Убить процесс на основе PID в Java - PullRequest
4 голосов
/ 06 марта 2012

Пока у меня есть это:

public static void main(String[] args) {

    try {
        String line;
        Process p = Runtime.getRuntime().exec(
                System.getenv("windir") + "\\system32\\" + "tasklist.exe");

        BufferedReader input = new BufferedReader(new InputStreamReader(
                p.getInputStream()));

        while ((line = input.readLine()) != null) {
            System.out.println(line); // <-- Parse data here.
        }
        input.close();
    } catch (Exception err) {
        err.printStackTrace();
    }

    Scanner killer = new Scanner(System.in);

    int tokill;

    System.out.println("Enter PID to be killed: ");

    tokill = killer.nextInt();

}

}

Я хочу иметь возможность убить процесс на основе PID, введенного пользователем.Как я могу это сделать?(Нужно только работать на Windows).* NB: Должен быть в состоянии убить любой процесс, вкл.СИСТЕМНЫЕ процессы, поэтому я предполагаю, что при использовании taskkill.exe для этого понадобится флаг -F?

Итак, если бы у меня было

Runtime.getRuntime().exec("taskkill /F /PID 827");

, как я могу заменить "827"?с моей переменной Tokill?

Ответы [ 3 ]

6 голосов
/ 06 марта 2012

Просто создайте строку, чтобы убить процесс:

String cmd = "taskkill /F /PID " + tokill;
Runtime.getRuntime().exec(cmd);
2 голосов
/ 06 марта 2012

Я сейчас не сижу перед компьютером с Windows. Но если tasklist работает для вас, вы можете использовать ProcessBuilder для запуска команды windows taskkill . Вызовите taskkill таким образом с ProcessBuilder экземпляром cmd /c taskkill /pid %pid% (замените% pid% фактическим pid). Вам не нужен абсолютный путь к обоим исполняемым файлам, потому что c:/windows/system32 находится в переменной пути.

Как отметил Эрик (в комментарии к вашему вопросу), многие уже имели этот ответ раньше.

0 голосов
/ 28 сентября 2018
String cmd = "taskkill /F /T /PID " + tokill;
Runtime.getRuntime().exec(cmd);

Используйте taskkill, если вы работаете в Windows.

Возможно, вы захотите использовать параметр / T, чтобы убить все порожденные дочерние процессы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...