Seiten

Freitag, 30. März 2012

Einen bestimmten Java-Prozess per Batch beenden

Wenn man einen Prozess per Batch-Datei beenden will, funktioniert das unter Windows ganz einfach mit dem Befehl taskkill. Dies funktioniert jedoch nicht, wenn man einen bestimmten Java-Prozess beenden will. Natürlich kann man die java.exe abschießen, was aber dazu führt, dass man alle Java-Prozesse beendet. Wer bspw. - so wie ich - den JBoss-Applikationsserver per Skript beenden will und gleichzeitig eine Java-IDE laufen hat beendet mit taskkill /f /im java.exe beide Anwendungen. Abhilfe schafft hierbei das Kommandozeilentool jps aus dem Oracle JDK. Mit dem Parameter -v sieht man alle laufenden Anwendungen mit den zugehörigen Kommandozeilenparametern. Standardmäßig ist das JDK unter c:\Program Files\Java\jdk<Versionsnummer>\ installiert, das Programm befindet sich im bin-Ordner.
Für ein Beispiel laufen hier einmal 3 Java-Programme (inkl. JBoss) gleichzeitig:


Wie man erkennen kann, gibt jps auch die Prozess-ID aus, was uns helfen wird den Prozess zu beenden. Wenn man den Prozess, den man beenden will herausgefunden hat, sucht man sich ein Teil aus der Kommandozeile aus, der ziemlich eindeutig ist. Ich nehme für den JBoss z.B. run.bat. Hiermit habe ich nun die Möglichkeit mit einer Pipe und einer Suche die Prozess-ID zu finden, um den JBoss zu beenden. Meine Batch sieht folgendermaßen aus:

@echo off
set jps_path=c:\Program Files\Java\jdk1.7.0_03\bin\
set command=jps -v
cd /d "%jps_path%"
FOR /f "tokens=1" %%G IN ('%command% ^| find "run.bat"') DO taskkill /f /pid %%G

Einfach den Schnipsel unter kill_JBoss.bat speichern, starten und nur der JBoss wird beendet. Der Pfad zum Bin-Ordner des JDK muss eventuell noch angepasst werden. Der Suchbegriff (hier: run.bat" steht in der for-Schleife und kann auf euren Prozess angepasst werden.
Im Ergebnis sieht das ganze dann so aus (Ich gebe vorher noch einmal alle Java-Prozesse aus):

Keine Kommentare:

Kommentar veröffentlichen