pkill для java-процессов на Windows

Written by elwood

batch-file

Часто бывает нужно убить процесс java, но именно тот, который был запущен с определёнными параметрами (т.к. в системе могут быть запущено несколько java-процессов). Для этого в unix-мире есть удобная команда pkill, которая выполняет то же самое, что и команда

ps | grep glassfish | awk '{print $2}' | xargs kill

А в Windows таких удобных команд нет. Стандартная команда tasklist не умеет выводить аргументы, с которыми были запущены процессы. Зато есть входящая в JDK утилита jps, которая умеет это делать для java-процессов. Нет grep, но есть FindStr. Нет возможности распарсить вывод с помощью awk, но есть FOR /F. Итак, несмотря на скудный инструментарий, мы всё же что-то можем сделать.

Примеры использования (Нужно предварительно добавить JDK\bin в PATH):

javakill glassfish

Находит java-процесс, в JVM-опциях содержащий строку glassfish, и убивает его, если он такой один. Если же найдено несколько подходящих процессов, будет запрошено подтверждение завершения первого из них.

javakill glassfish /Q

То же самое, но в случае неоднозначности первый подходящий процесс будет завершён без запроса подтверждения.

javakill glassfish /A

Если будут найдены несколько подходящих процессов, будет запрошено подтверждение на завершение их всех.

javakill glassfish /Q /A

Будут завершены все подходящие процессы без запроса подтверждений.