Frage

Ich habe ein externes Windows-EXE, die tatsächlich Java-Anwendung ist. Ausführen die EXE startet Javaw.exe, was wiederum läuft, dass Java-Anwendung

ich nicht schreiben, dass die Anwendung und haben keinen Zugriff auf sie über eine API. Ich muss in der Lage sein, es zu töten, aber. So jetzt ich töte nur den Windows-Prozess javaw.exe, die gut für eine Testmaschine läuft nur, dass Java-Anwendung, aber wenn ich feinere Granularität benötigen, kann ich derzeit nicht so tun.

ergab Meine Suchvorschläge wie Sysinternal Process Explorer oder die JPS Befehl in dem JDK, aber in den Zielsystemen, für die ich das Drehbuch anbieten will, weder JDK noch Sysinternal Process Explorer ausgeführt werden kann.

Gibt es eine andere Art und Weise, die nicht ein externes Tool benötigt? Hat javaw.exe einen Schalter oder eine Befehlszeilenoption haben, dass die Listen Java-Prozesse? Gibt es eine JRE-Version von JPS?

Danke.

War es hilfreich?

Lösung

ich noch würde vorschlagen, dass das Töten nur die javaw.exe.

Ich kann den Nachteil sehen, da es das Verfahren ist, dass Sie schließlich töten wollen.

Beachten Sie, dass, wenn Sie mehrere Anwendungen auf dem Computer ausführen, sollten sie jeweils eine separate JVM-Instanz haben. So können Sie die spezifische Anwendung noch töten können, wenn Sie benötigen.

Andere Tipps

Das JDK (und möglicherweise die JRE) Schiff mit einem Programm namens JPS, die alle Java-Prozesse auflisten können aber auch sagen, die Main-Klasse zur Zeit in dieser JVM ausgeführt wird. Wenn JMX / JConsole keine Option ist, einfach die Ausgabe von „JPS -ml“ Parsen und das Töten der entsprechende Prozess arbeiten kann.

Wenn Sie eine ganze JVM töten wollen, töten nur die javaw.exe Prozess. Innerhalb einer JVM kann es sein, mehr Java Themen , aber es gibt keine Möglichkeit, in eine JVM zu stecken und einen Thread zu beenden, wenn der Entwickler der Anwendung ein Verfahren bereitgestellt, dies zu tun.

Basierend auf Ihrem Kommentar, mehrere javaw.exe Programme ausgeführt werden, und Sie müssen wissen, was man zu töten.

Sie möchten vielleicht mit JConsole zu jedem der Prozesse, um zu versuchen verbinden und die JVM zu inspizieren. Es kann genügend Anhaltspunkte sein, um zu bestimmen, welche zu töten. Sobald Sie das Profil Ihrer Anwendung identifiziert haben, sollten Sie die Logik-Skript der Lage sein, es in Zukunft zu erleichtern (Verwendung JMX die meisten Informationen von JConsole bereitgestellt bekommen).

Wenn die ausführbare Datei startet javaw dann beendet, ohne weitere Informationen bietet es, wie Sie die Sprache benötigen, um Ihre Scripting scheint eine Momentaufnahme der laufenden Prozesse auf der Maschine zu nehmen, bevor die ausführbare Datei starten und nachdem die ausführbare Datei beendet ist. Dann werden Sie in der Lage zu ableiten, welche der neue javaw Prozess. Welche Skriptsprache verwenden Sie?

Ein weiterer Ansatz: Wenn Sie die jdk haben, gibt es ein Programm jvisualvm im Ordner ist genannt. Es hat schöner Informationen über jeden laufenden JVM Kontext. Eines der Dinge, die Sie ist die PID der VM sehen, die ich verwende, um den Prozess in Windows mit dem Task-Manager zu töten (auf Windows ist PID standardmäßig nicht angezeigt, aber Sie können die Spalte, indem Sie in dem Blick leicht ermöglichen -> show Spalten)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top