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

23

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

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

start javaw -jar start.jar

Как мы можем найти процесс и остановить его позже?

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

stop javaw -jar start.jar
  • 4
    Вы пробовали Ctrl + C или Ctrl + Break ?
  • 0
    да, но можно ли создать файл .bat, чтобы остановить его с помощью Ctrl + C или Ctrl + Break?
Показать ещё 3 комментария
Теги:
batch-file
cmd

11 ответов

11
Лучший ответ

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

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.)

  • 0
    PowerShell также делает это тривиальным.
  • 3
    Если вы хотите убить все процессы java.exe: taskkill /F /IM java.exe /T Таким образом, спасибо за цикл FOR я использовал в другом месте :)
36

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

taskkill /f /im jqs.exe
taskkill /f /im javaw.exe
taskkill /f /im java.exe
  • 0
    Спасибо, это помогло мне
22

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

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

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

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

wmic потрясающе!

  • 0
    работает хорошо, но как мне заставить его работать в пакетном файле?
  • 0
    @Xerus Синтаксис должен быть таким же. Единственное различие, о котором я могу подумать, заключается в том, что вам может понадобиться удвоить знаки процента в предложении where : where "name like '%%java%%'" чтобы указать буквенные знаки процента в качестве подстановочных знаков WQL, чтобы ваш пакетный скрипт не попытайтесь раскрыть %java% как пакетную переменную.
Показать ещё 2 комментария
8

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

taskkill /im javaw.exe

или

taskkill /im java.exe

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

  • 2
    taskkill /f /im java.exe в моем случае. Спасибо за Ваш ответ!
1
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)

0

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

Начните

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

Стоп

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

0

Откройте окна cmd. Сначала перечислите все процессы Java,

jps -m

Теперь получите имя и выполните команду ниже,

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

образец :)

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.
0

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

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
0

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

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

Else taskkill /im java.exe будет работать, чтобы убить все java-процессы

0

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

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

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню