Я новичок в cmd, поэтому, пожалуйста, позвольте мне задать глупый вопрос: как мы можем остановить запущенный Java-процесс с помощью Windows cmd?
Например, если мы запустим Jetty (мини-веб-сервер) со следующей командой:
start javaw -jar start.jar
Как мы можем найти процесс и остановить его позже?
Очевидно, что следующая команда не работает:
stop javaw -jar start.jar
Это довольно грязно, но вам нужно сделать что-то вроде следующего:
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.)
taskkill /F /IM java.exe /T
Таким образом, спасибо за цикл FOR
я использовал в другом месте :)
Когда я запустил taskkill, чтобы остановить процесс javaw.exe, он сказал бы, что он был завершен, но остался включенным. Также необходимо остановить процесс jqs (java qucikstart). Запуск этого командного файла позаботился об этой проблеме.
taskkill /f /im jqs.exe
taskkill /f /im javaw.exe
taskkill /f /im java.exe
Мне нравится этот.
wmic process where "name like '%java%'" delete
Фактически вы можете убить процесс на удаленной машине таким же образом.
wmic /node:computername /user:adminuser /password:password process where "name like '%java%'" delete
wmic потрясающе!
where
: where "name like '%%java%%'"
чтобы указать буквенные знаки процента в качестве подстановочных знаков WQL, чтобы ваш пакетный скрипт не попытайтесь раскрыть %java%
как пакетную переменную.
Обычно у меня нет так много процессов Java, поэтому
taskkill /im javaw.exe
или
taskkill /im java.exe
должно быть достаточно. Однако это уничтожит все экземпляры Java.
taskkill /f /im java.exe
в моем случае. Спасибо за Ваш ответ!
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
)
Ответ, который предполагает что-то вроде 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
Откройте окна 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.
(в ОС 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
Если вы хотите убить не все java-процессы, но указать запущенные jars. Он будет работать и для нескольких банок.
wmic Path win32_process Where "CommandLine Like '%YourJarName.jar%'" Call Terminate
Else taskkill /im java.exe
будет работать, чтобы убить все java-процессы
Вы можете сделать это с помощью PowerShell:
$process = Start-Process "javaw" "-jar start.jar" -PassThru
taskkill /pid $process.Id
Команда taskkill
сделает изящное закрытие приложения.
start javaw -DSTOP.PORT = 8079 -DSTOP.KEY = secret -jar start.jar
start javaw -DSTOP.PORT = 8079 -DSTOP.KEY = secret -jar start.jar --stop
Ctrl + C
илиCtrl + Break
?