Убить / Остановить приложение с помощью Java Code - PullRequest
2 голосов
/ 06 декабря 2011

Можно ли остановить приложение в Windows, используя код Java? Я хотел бы создать программу, которая похожа на ярлык для остановки приложения на моем компьютере. Возможно ли использовать ProcessBuilder? Спасибо

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

Обычная Java, без нативного доступа? Нет.

ProcessBuilder позволяет вам контролировать процессы, которые вы запустили из приложения Java, но не дает вам контроля над процессами, которые были запущены другими процессами.

Согласно комментарию пользователя 988052, вы можете использовать pskill из Sysinternals Suite , чтобы выполнить это через Runtime.exec. pskill использует вызов функции TerminateProcess . Вы также можете вызвать эту функцию с помощью JNI (или другого собственного вызывающего абонента, такого как JNA, NLink и т. Д.), Но вам необходимо получить дескриптор процесса с помощью вызова функции OpenProcess .

0 голосов
/ 06 декабря 2011

Я считаю, что JRE не предоставляет API для системных процессов.ProcessBuilder может создавать системные процессы, но не может предоставить вам объект Process для процесса, созданного вне JVM.Я полагаю, что это философское решение со стороны Java-пользователей, чтобы избежать определенных задач для конкретной ОС, где это возможно.Вы можете подумать, что в каждой ОС есть pids или что у них есть какое-то сообщение об уничтожении, но Java работает на многих ОС, некоторые из них довольно странные.это с JNI, но это было бы расточительно.Как говорит г-н 988052, я предлагаю вам выполнить системную команду через Runtime.exec или ProcessBuilder.Вам нужно будет решить, какие операционные системы вы хотите поддерживать, и убедиться, что команды (и код обнаружения ОС) подходят для каждой из них.

0 голосов
/ 06 декабря 2011

Можно ли остановить приложение в Windows, используя код Java?... Возможно ли использовать ProcessBuilder?

Только если вы запустили приложение из того же Java-приложения, из которого пытаетесь его заполнить.

Кроме этого, вам нужноприбегнуть к выполнению специфичной для Windows команды, чтобы выполнить уничтожение ... или что-то на основе JNI для выполнения собственных вызовов библиотеки Windows.

Другие сложности состоят в том, что вы не сможете убить определенные процессы из-запроблемы с разрешениями, и некоторые процессы могут отказаться быть убитыми.

...