Если вы используете 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
, один старт от вас и один от приложения.