Как мы можем остановить запущенный процесс Java через Windows cmd?

Я новичок в cmd, поэтому позвольте мне задать глупый вопрос: как мы можем остановить запущенный процесс Java через Windows cmd?

Например, если мы запустим Jetty (мини-веб-сервер) с помощью следующей команды:

start javaw -jar start.jar

Как мы находим процесс и останавливаем его позже?

Очевидно, что следующая команда не работает:

stop javaw -jar start.jar

person Winston Chen    schedule 15.04.2010    source источник
comment
Вы пробовали Ctrl + C или Ctrl + Break?   -  person Frank Bollack    schedule 15.04.2010
comment
да, но могу ли я создать файл .bat, чтобы остановить его с помощью Ctrl + C или Ctrl + Break?   -  person Winston Chen    schedule 15.04.2010
comment
Возможно, проверьте команду taskkill. У него есть много вариантов выбора процесса для уничтожения: по идентификатору процесса, по шаблону имени, по владельцу пользователя и т. д. Но я рекомендую сначала поискать стандартный, менее насильственный способ закрытия конкретного приложения (на серверах обычно есть какие-то остановки). команда)   -  person Eyal Schneider    schedule 15.04.2010
comment
Вы знаете название процесса? Если вы это сделаете, вы можете создать файл .bat, который использует команду taskkill: microsoft.com/resources/documentation/windows/xp/all/proddocs/ (например, taskkill /im notepad.exe).   -  person IVlad    schedule 15.04.2010
comment
эй, ребята, спасибо всем, но я не могу проголосовать за вас, ребята, или отметить правильный ответ здесь. Если вы не против, пожалуйста, ответьте.   -  person Winston Chen    schedule 15.04.2010


Ответы (12)


Это довольно грязно, но вам нужно сделать что-то вроде следующего:

START "do something window" dir
FOR /F "tokens=2" %I in ('TASKLIST /NH /FI "WINDOWTITLE eq do something window"' ) DO SET PID=%I
ECHO %PID%
TASKKILL /PID %PID%

Нашел это на эта страница. (в архиве)

(Такого рода вещи намного проще, если у вас есть система UNIX / LINUX... или если вы используете Cygwin или аналогичный в Windows.)

person Stephen C    schedule 15.04.2010
comment
PowerShell также делает это тривиальным. - person Joey; 18.04.2010
comment
Если вы хотите убить все процессы java.exe: taskkill /F /IM java.exe /T. Таким образом, спасибо за цикл FOR, который я повторно использовал в другом месте :) - person Benj; 19.08.2015

Когда я запускал taskkill, чтобы остановить процесс javaw.exe, он говорил, что он завершен, но продолжал работать. Процесс jqs (java qucikstart) также необходимо остановить. Запуск этого командного файла решил проблему.

taskkill /f /im jqs.exe
taskkill /f /im javaw.exe
taskkill /f /im java.exe
person Tup    schedule 17.10.2011

Мне нравится этот.

wmic process where "name like '%java%'" delete

Таким же образом вы можете убить процесс на удаленной машине.

wmic /node:computername /user:adminuser /password:password process where "name like '%java%'" delete

вмик классный!

person rojo    schedule 14.02.2013
comment
работает хорошо, но как заставить его работать в пакетном файле? - person Xerus; 15.12.2017
comment
@Xerus Синтаксис должен быть таким же. Единственная разница, о которой я могу думать, заключается в том, что вам может потребоваться удвоить знаки процента в предложении where: where "name like '%%java%%'", чтобы указать буквальные знаки процента в качестве подстановочных знаков WQL, поэтому ваш пакетный сценарий не будет пытаться расширить %java% как пакетную переменную. - person rojo; 15.12.2017
comment
@Xerus Вам, вероятно, следует опубликовать новый вопрос и показать, что происходит в контексте. - person rojo; 15.12.2017
comment
Работал для меня, спасибо! - person Amor; 09.07.2021

Откройте командную строку Windows. Сначала перечислите все процессы Java,

jps -m

теперь получите имя и запустите команду ниже,

for /f "tokens=1" %i in ('jps -m ^| find "Name_of_the_process"') do ( taskkill /F /PID %i )

или просто убить идентификатор процесса

taskkill /F /PID <ProcessID>

образец :)

C:\Users\tk>jps -m
15176 MessagingMain
18072 SoapUI-5.4.0.exe
15164 Jps -m
3420 org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar -os win32 -ws win32 -arch x86_64 -showsplash -launcher C:\Users\tk\eclipse\jee-neon\eclipse\eclipse.exe -name Eclipse --launcher.library C:\Users\tk\.p2\pool\plugins\org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.401.v20161122-1740\eclipse_1617.dll -startup C:\Users\tk\eclipse\jee-neon\eclipse\\plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar --launcher.appendVmargs -exitdata 4b20_d0 -product org.eclipse.epp.package.jee.product -vm C:/Program Files/Java/jre1.8.0_131/bin/javaw.exe -vmargs -Dosgi.requiredJavaVersion=1.8 -XX:+UseG1GC -XX:+UseStringDeduplication -Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m -Declipse.p2.max.threads=10 -Doomph.update.url=http://download.eclipse.org/oomph/updates/milestone/latest -Doomph.redirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/ -jar C:\Users\tk\

и

C:\Users\tk>for /f "tokens=1" %i in ('jps -m ^| find "MessagingMain"') do ( taskkill /F /PID %i )

C:\Users\tk>(taskkill /F /PID 15176  )
SUCCESS: The process with PID 15176 has been terminated.

or

C:\Users\tk>taskkill /F /PID 15176 
SUCCESS: The process with PID 15176 has been terminated.
person tk_    schedule 22.03.2019
comment
Спасибо, это сработало для меня. - person Haranath Boggarapu; 27.04.2021

Обычно у меня не так много открытых процессов Java, поэтому

taskkill /im javaw.exe

or

taskkill /im java.exe

должно хватить. Однако это уничтожит все экземпляры Java.

person Joey    schedule 18.04.2010

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

wmic Path win32_process Where "CommandLine Like '%YourJarName.jar%'" Call Terminate

В противном случае taskkill /im java.exe будет работать, чтобы убить все процессы Java.

person Vinaykumar Patel    schedule 06.01.2017

Ответ, который предлагает что-то вроде taskkill /f /im java.exe, вероятно, сработает, но если вы хотите убить только один процесс Java вместо всех, я могу предложить сделать это с помощью заголовков окон. . Пример:

Начинать

start "MyProgram" "C:/Program Files/Java/jre1.8.0_201/bin/java.exe" -jar MyProgram.jar

Останавливаться

taskkill /F /FI "WINDOWTITLE eq MyProgram" /T

person FloPinguin    schedule 15.04.2019

FOR /F "tokens=1,2 delims= " %%G IN ('jps -l') DO IF %%H==name.for.the.application.main.Class taskkill /F /PID %%G

name.for.the.application.main.Class - замените это на основной класс вашего приложения (вы можете найти его во втором столбце вывода jps -l)

person vneste    schedule 26.08.2011

запустить javaw -DSTOP.PORT=8079 -DSTOP.KEY=секрет -jar start.jar

start javaw -DSTOP.PORT=8079 -DSTOP.KEY=secret -jar start.jar --stop

person ffoooo    schedule 12.06.2013

Вы можете сделать это с помощью PowerShell:

$process = Start-Process "javaw" "-jar start.jar" -PassThru
taskkill /pid $process.Id

Команда taskkill корректно закроет приложение.

person Rosberg Linhares    schedule 06.01.2017

(в ОС Windows без службы) Пример запуска / остановки Spring Boot.

run.bat

@ECHO OFF
IF "%1"=="start" (
    ECHO start your app name
    start "yourappname" java -jar -Dspring.profiles.active=prod yourappname-0.0.1.jar
) ELSE IF "%1"=="stop" (
    ECHO stop your app name
    TASKKILL /FI "WINDOWTITLE eq yourappname"
) ELSE (
    ECHO please, use "run.bat start" or "run.bat stop"
)
pause

start.bat

@ECHO OFF
call run.bat start

stop.bat:

@ECHO OFF
call run.bat stop
person Stéphane GRILLON    schedule 18.09.2017

person    schedule
comment
Использование taskkill уже упоминалось во многих других ответах, в том числе для Windows. - person Eric Aya; 19.07.2021
comment
@Eric Aya Вы абсолютно правы, но я был сбит с толку большинством ответов и решил поделиться некоторыми очень простыми командами. Я надеюсь, что результат вышеуказанной команды удовлетворит потребность. - person sarath; 19.07.2021