2010-04-15 24 views
18

Jestem nowicjuszem w cmd, więc pozwól mi zadać głupie pytanie: Jak możemy zatrzymać uruchomiony proces Java poprzez cmd Windows?Jak zatrzymać proces uruchamiania w Javie za pomocą cmd Windows?

Na przykład, jeśli zaczniemy Jetty (mini serwer WWW) za pomocą następującego polecenia:

start javaw -jar start.jar 

Jak znaleźć ten proces i zatrzymać go później?

Oczywiście następujące polecenie nie działa:

stop javaw -jar start.jar 
+4

Próbowałaś 'Ctrl + C' lub' Ctrl + Break'? –

+0

tak, ale czy mogę skompilować plik .bat, aby zatrzymać go za pomocą Ctrl + C lub Ctrl + Break? –

+2

Może sprawdź polecenie taskkill. Ma wiele opcji wyboru procesu zabijania: według identyfikatora procesu, według nazwy, właściciela itp. Ale polecam najpierw szukać standardowego, mniej agresywnego sposobu zamknięcia konkretnej aplikacji (serwery zwykle mają jakiś rodzaj polecenia "stop") –

Odpowiedz

9

Jest raczej niechlujny ale trzeba zrobić coś jak następuje:

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% 

Znalazłem to na this page.

(Tego rodzaju rzeczy jest o wiele łatwiejsze, jeśli masz system UNIX/Linux ... lub jeśli uruchomić Cygwin lub podobne w systemie Windows).

+0

PowerShell również czyni to trywialnym. – Joey

+1

Jeśli chcesz zabić * wszystkie procesy * java.exe: 'taskkill/F/IM java.exe/T'. Tak powiedziałem, dziękuję za pętlę 'FOR', którą ponownie wykorzystałem gdzie indziej :) – Benj

8

Normalnie nie mam, że wiele procesów Java otwarte tak

taskkill /im javaw.exe 

lub

taskkill /im java.exe 

powinno wystarczyć. To zabije jednak instancje Javy.

+2

' taskkill/f/im java.exe' w moim przypadku. Dzięki za odpowiedź! – lordmegamax

2
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 - to główne klasy danej aplikacji wymienić (można go znaleźć w drugiej kolumnie jps -l wyjściu)

28

Kiedy wpadłem taskkill aby zatrzymać proces javaw.exe byłoby powiedzieć, że już zakończone, ale nadal działał. Proces jqs (java qucikstart) również musi zostać zatrzymany. Uruchomienie tego pliku wsadowego zajęło się problemem.

taskkill /f /im jqs.exe 
taskkill /f /im javaw.exe 
taskkill /f /im java.exe 
20

Podoba mi się ten.

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

W rzeczywistości można zabić proces na zdalnym komputerze w ten sam sposób.

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

wmic jest niesamowity!

+0

działa ładnie, ale jak mogę go uruchomić w pliku wsadowym? – Xerus

+0

@Xerus Składnia powinna być taka sama. Jedyną różnicą, o której mogę pomyśleć, może być potrzeba podwojenia znaków procentowych w klauzuli "where": "gdzie" nazwa taka jak "%% java %% '" 'aby określić znaki procentowe jako znaki WQL, więc twoja partia Skrypt nie będzie próbował rozwinąć '% java%' jako zmiennej wsadowej. – rojo

+0

@Xusus Prawdopodobnie powinieneś zamieścić nowe pytanie i pokazać, co się dzieje w danym kontekście. – rojo

1

początek javaw -DSTOP.PORT = 8079 -DSTOP.KEY = tajny -jar start.jar

początek javaw -DSTOP.PORT = 8079 -DSTOP.KEY = tajny -jar start.jar --stop

0

można to zrobić za pomocą PowerShell:

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

komenda taskkill będzie Płynnego zamknąć aplikację.

0

Jeśli chcesz zabić nie wszystkie procesy Java, ale działające specyficzne słoiki. Będzie działać również dla wielu słoików.

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

Else taskkill /im java.exe będzie działać, aby zabić wszystkie procesy Java

0

(w systemie operacyjnym Windows bez Service) Wiosna Boot start/próbkę stopu.

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 
Powiązane problemy