Как убить несколько процессов в Java? - PullRequest
0 голосов
/ 28 июня 2018

Я хочу создать несколько процессов, затем убивать один за другим (ожидание 2 секунды перед каждым уничтожением). В результате должны появиться 3 окна, а затем исчезнуть по порядку. Проблема только в том, что первый процесс убит.

 public static void main(String[] args) {
    try {
        Process p1 = Runtime.getRuntime().exec("notepad.exe");
        Process p2 = Runtime.getRuntime().exec("calc.exe");
        Process p3 = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", "start", "dir"});
        Thread.sleep(2000);
        // p1.waitFor(2, TimeUnit.SECONDS);
        p1.destroy();
        Thread.sleep(2000);
        //  p2.waitFor(2, TimeUnit.SECONDS);
        p2.destroy();
        Thread.sleep(2000);
        //  p3.waitFor(2, TimeUnit.SECONDS);
        p3.destroy();
    } catch (Exception ex) {
        System.out.println("" + ex);
    }
}

1 Ответ

0 голосов
/ 28 июня 2018

Если вы используете Java 9 , вы можете использовать ProcessHandle и destroyForcibbly () метод, который почти такой же, как kill -9, но так как Java 8 вы можете использовать destroyForcibly() для Process объекта.

@ Edit

Это проблема только с calc.exe и cmd.exe, так что давайте посмотрим на процесс calc.exe.

При запуске calc.exe, calc.exe запускается C:\Program Files\WindowsApps\Microsoft.WindowsCalculator_10.1804.911.0_x64__8wekyb3d8bbwe

Так что эти процессы разные. Calc.exe запускает другой процесс с другим PID.

Что делать?

В Java 9 . Вы можете использовать класс ProcessHandle, чтобы найти процесс, который запускается из этого каталога, взять PID и убить:

Я получаю: Optional[C:\Program Files\WindowsApps\Microsoft.WindowsCalculator_10.1804.911.0_x64__8wekyb3d8bbwe\Calculator.exe]

Чтобы получить наш процесс, вы можете получить снимок процесса до запуска calc.exe и сравнить со снимком после запуска calc.exe. Но это не на 100% уверен, что вы получите только один calculator.exe.

Может быть так, что пользователь и ваше приложение запускают calc.exe одновременно. Таким образом, вы получаете два процесса Calc.exe, один старт от вас и один от приложения.

...