Dies ist ein weiterer Ansatz, um die Prozessliste mit dem Befehl " ps -e " zu analysieren :
try {
String line;
Process p = Runtime.getRuntime().exec("ps -e");
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line); //<-- Parse data here.
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
Wenn Sie Windows verwenden, sollten Sie die Zeile "Process p = Runtime.getRun ..." etc ... (3. Zeile) für eine Zeile ändern, die folgendermaßen aussieht:
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
Hoffe die Info hilft!
tasklist.exe /fo csv /nh
um die Liste im CSV-Format abzurufen. Dies ist viel einfacher zu analysieren.ps -elf | grep java
wird nichts zurückgeben,ps -elf
würde aber wie erwartet funktionieren.(.exec (Runtime/getRuntime) "tasklist"))
(in Clojure mit Java-Interop) wird dertasklist
Prozess korrekt zurückgegeben, auch ohne Angabe eines Verzeichnisses.Schließlich ist es mit Java 9+ möglich mit
ProcessHandle
:Ausgabe:
quelle
java.lang
so kein Import erforderlichUnter Windows gibt es eine Alternative mit JNA :
quelle
GetModuleFileName
. Ein Beispiel finden Sie unter stackoverflow.com/questions/7521693/… .WMIC PROCESS
oder um die Ausgabe für einen bestimmten Prozess einzuschränken :WMIC PROCESS WHERE name='theName'
. Sie können weitere Filter verwenden, um die Ausgabe bei Bedarf zu begrenzen. Die Befehlszeile ist in der CommandLine-Spalte der zurückgegebenen Tabelle enthalten (= 2. Spalte)Ich kann mir das nur vorstellen, indem ich eine Befehlszeilenanwendung aufrufe, die die Arbeit für Sie erledigt, und dann die Ausgabe auf dem Bildschirm abkratzt (wie die ps- und Windows-Aufgabenliste von Linux).
Leider bedeutet dies, dass Sie einige Parsing-Routinen schreiben müssen, um die Daten von beiden zu lesen.
quelle
tasklist
Programm für die Ausgabe von CSV konfiguriert werden :)YAJSW (ein weiterer Java Service Wrapper) scheint JNA-basierte Implementierungen seiner org.rzo.yajsw.os.TaskList-Schnittstelle für Win32, Linux, BSD und Solaris zu haben und unterliegt einer LGPL-Lizenz. Ich habe nicht versucht, diesen Code direkt aufzurufen, aber YAJSW funktioniert wirklich gut, wenn ich ihn in der Vergangenheit verwendet habe, sodass Sie sich nicht zu viele Sorgen machen sollten.
quelle
Mit jProcesses können Sie die Liste der ausgeführten Prozesse einfach abrufen
quelle
Es gibt keine plattformneutrale Möglichkeit, dies zu tun. In der Version 1.6 von Java wurde eine " Desktop " -Klasse hinzugefügt, die tragbare Möglichkeiten zum Durchsuchen, Bearbeiten, Versenden, Öffnen und Drucken von URIs ermöglicht. Es ist möglich, dass diese Klasse eines Tages erweitert wird, um Prozesse zu unterstützen, aber ich bezweifle es.
Wenn Sie nur neugierig auf Java-Prozesse sind, können Sie die API java.lang.management verwenden, um Thread- / Speicherinformationen in der JVM abzurufen.
quelle
Für Windows verwende ich Folgendes:
quelle
Dies kann für Apps mit einer gebündelten JRE nützlich sein: Ich suche nach dem Ordnernamen, von dem aus ich die Anwendung ausführe: Wenn Ihre Anwendung also ausgeführt wird von:
Dann können Sie feststellen, ob es bereits in J9 ausgeführt wird, indem Sie:
quelle
Das Parsen von Code
ps aux
für Linux undtasklist
Windows ist die beste Option, bis etwas Allgemeineres hinzukommt.Für Windows können Sie auf Folgendes verweisen: http://www.rgagnon.com/javadetails/java-0593.html
Linux kann die Ergebisse der
ps aux
durchgrep
Auch die Verarbeitung machen würde / schnelle und einfache Suche. Ich bin sicher, dass Sie auch für Windows etwas Ähnliches finden können.quelle
Das folgende Programm ist nur mit der Java 9+ Version kompatibel ...
Um die CurrentProcess-Informationen abzurufen,
Für alle laufenden Prozesse
quelle
Wir müssen verwenden,
process.getOutputStream.close()
sonst wird es in while-Schleife gesperrt.quelle
quelle
Dies ist mein Code für eine Funktion, die die Aufgaben und ihre Namen abruft und sie auch zu einer Liste hinzufügt, auf die über eine Liste zugegriffen werden kann. Es erstellt temporäre Dateien mit den Daten, liest die Dateien und erhält den Aufgabennamen mit dem Suffix .exe und ordnet die zu löschenden Dateien an, wenn das Programm mit System.exit (0) beendet wurde. Außerdem werden die verwendeten Prozesse ausgeblendet Holen Sie sich die Aufgaben und auch java.exe, damit der Benutzer den Prozess, der das Programm insgesamt ausführt, nicht versehentlich beenden kann.
quelle