Wie bekomme ich eine Liste der aktuell geöffneten Fenster/Prozesse mit Java?

Lesezeit: 5 Minuten

Wie bekomme ich eine Liste der aktuell geoffneten FensterProzesse mit
Rodrigo Amaya

Weiß jemand, wie ich die aktuellen offenen Fenster oder den Prozess einer lokalen Maschine mit Java erhalte?

Was ich versuche, ist: Listen Sie die aktuell geöffnete Aufgabe, die geöffneten Fenster oder Prozesse auf, wie im Windows Taskmanager, aber mit einem plattformübergreifenden Ansatz – wenn möglich nur mit Java.

Wie bekomme ich eine Liste der aktuell geoffneten FensterProzesse mit
Rodrigo Amaya

Dies ist ein weiterer Ansatz, um die Prozessliste aus dem Befehl „ps-e“:

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) ändern, für eine, die so aussieht:

Process p = Runtime.getRuntime().exec
    (System.getenv("windir") +"\\system32\\"+"tasklist.exe");

Hoffe die Info hilft!

  • So erhalten Sie die Start- und Endzeit des Prozesses

    – Dollar

    11. September 2012 um 9:27 Uhr

  • Führen Sie unter Windows aus tasklist.exe /fo csv /nh Um die Liste im CSV-Format zu erhalten, ist das viel einfacher zu analysieren.

    – Emmanuel Burg

    24. Januar 2013 um 15:31 Uhr

  • aber es zeigt nicht den jar-namen. Der Name meiner ausführbaren JAR lautet helloDemo.jar. aber es zeigt nichts dafür

    – Beschwöre Bappi

    2. Mai 2015 um 10:57 Uhr

  • Warum würde es nicht funktionieren, wenn ich ein | hinzufüge grep java ? dh ps -elf | grep java wird nichts zurückgeben, aber ps -elf würde wie erwartet funktionieren.

    – Itay Moav-Malimovka

    2. Mai 2016 um 20:28 Uhr

  • Es sollte beachtet werden, dass das “Windows-spezifische” Bit am unteren Rand unnötig zu sein scheint. Unter Windows 10, (.exec (Runtime/getRuntime) "tasklist")) (in Clojure unter Verwendung von Java-Interop) gibt die korrekt zurück tasklist verarbeiten, auch ohne Angabe eines Verzeichnisses.

    – Krebserregend

    9. Januar 2017 um 18:25 Uhr


1646346430 861 Wie bekomme ich eine Liste der aktuell geoffneten FensterProzesse mit
Hugo M.

Mit Java 9+ ist es endlich möglich ProcessHandle:

public static void main(String[] args) {
    ProcessHandle.allProcesses()
            .forEach(process -> System.out.println(processDetails(process)));
}

private static String processDetails(ProcessHandle process) {
    return String.format("%8d %8s %10s %26s %-40s",
            process.pid(),
            text(process.parent().map(ProcessHandle::pid)),
            text(process.info().user()),
            text(process.info().startInstant()),
            text(process.info().commandLine()));
}

private static String text(Optional<?> optional) {
    return optional.map(Object::toString).orElse("-");
}

Ausgabe:

    1        -       root   2017-11-19T18:01:13.100Z /sbin/init
  ...
  639     1325   www-data   2018-12-04T06:35:58.680Z /usr/sbin/apache2 -k start
  ...
23082    11054    huguesm   2018-12-04T10:24:22.100Z /.../java ProcessListDemo

  • Welche Importe sollten hinzugefügt werden, um mit ProcessHandle zu arbeiten?

    – Jordi

    28. Mai 2018 um 16:35 Uhr

  • Diese Klasse ist drin java.lang also kein Import nötig

    – Hugo M.

    28. Mai 2018 um 16:42 Uhr

Unter Windows gibt es eine Alternative mit JNA:

import com.sun.jna.Native;
import com.sun.jna.platform.win32.*;
import com.sun.jna.win32.W32APIOptions;

public class ProcessList {

    public static void main(String[] args) {
        WinNT winNT = (WinNT) Native.loadLibrary(WinNT.class, W32APIOptions.UNICODE_OPTIONS);

        WinNT.HANDLE snapshot = winNT.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));

        Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference();

        while (winNT.Process32Next(snapshot, processEntry)) {
            System.out.println(processEntry.th32ProcessID + "\t" + Native.toString(processEntry.szExeFile));
        }

        winNT.CloseHandle(snapshot);
    }
}

  • Dadurch wird nur der Befehlsname angegeben, NICHT die gesamte Befehlszeile. Gibt es eine Möglichkeit, die gesamte Befehlszeile zu erhalten?

    – Christoph Dancy

    4. Mai 2013 um 19:31 Uhr

  • Den vollständigen Pfad erhalten Sie telefonisch GetModuleFileName. Ein Beispiel finden Sie unter stackoverflow.com/questions/7521693/….

    – Emmanuel Burg

    6. Mai 2013 um 8:29 Uhr

  • Das einzige Problem dabei ist, dass es nur den Pfad des Prozesses angibt, NICHT die gesamte Befehlszeile. Gibt es eine Möglichkeit, die vollständige Befehlszeile des Prozesses abzurufen (z. B. ‘ant.bat -f helloWorld.ext’)?

    – Christoph Dancy

    6. Mai 2013 um 16:31 Uhr

  • Wie kann man überprüfen, ob ein bestimmter Prozess wie xyz.exe ausgeführt wird oder nicht?

    – unbekannte Bits

    5. Juli 2013 um 6:31 Uhr

  • @ChristopherDancy nicht sicher, ob Sie noch eine Antwort benötigen, aber der Vollständigkeit halber und da es hier auch nicht erwähnt wurde: Winodws-Verwaltungsinformationen Befehlszeile (oder einfach wmic.exe) bietet eine Möglichkeit, viele Informationen über laufende Anwendungen abzurufen – 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 einzuschränken. Die Kommandozeile ist in der CommandLine-Spalte der zurückgegebenen Tabelle enthalten (= 2. Spalte)

    – Roman Vottner

    13. Januar 2014 um 13:51 Uhr


Wie bekomme ich eine Liste der aktuell geoffneten FensterProzesse mit
jodonnell

Die einzige Möglichkeit, die ich mir vorstellen kann, besteht darin, eine Befehlszeilenanwendung aufzurufen, die die Arbeit für Sie erledigt, und dann die Ausgabe zu scannen (wie Linux ps und Windows Tasklist).

Leider bedeutet das, dass Sie einige Parsing-Routinen schreiben müssen, um die Daten von beiden zu lesen.

Process proc = Runtime.getRuntime().exec ("tasklist.exe");
InputStream procOutput = proc.getInputStream ();
if (0 == proc.waitFor ()) {
    // TODO scan the procOutput for your data
}

JAJSW (Yet Another Java Service Wrapper) scheint JNA-basierte Implementierungen seiner org.rzo.yajsw.os.TaskList-Schnittstelle für win32, linux, bsd und solaris zu haben und steht unter einer LGPL-Lizenz. Ich habe nicht versucht, diesen Code direkt aufzurufen, aber YAJSW funktioniert wirklich gut, wenn ich es in der Vergangenheit verwendet habe, also sollten Sie sich nicht allzu viele Sorgen machen.

  • anscheinend ist v12+ eine Apache/LGPL-Doppellizenz

    – Harschware

    25. Februar 2015 um 0:18 Uhr


1646346432 35 Wie bekomme ich eine Liste der aktuell geoffneten FensterProzesse mit
Irwin Nawrocki

Sie können die Liste der laufenden Prozesse einfach mit abrufen jProzesse

List<ProcessInfo> processesList = JProcesses.getProcessList();

for (final ProcessInfo processInfo : processesList) {
    System.out.println("Process PID: " + processInfo.getPid());
    System.out.println("Process Name: " + processInfo.getName());
    System.out.println("Process Used Time: " + processInfo.getTime());
    System.out.println("Full command: " + processInfo.getCommand());
    System.out.println("------------------");
}

  • anscheinend ist v12+ eine Apache/LGPL-Doppellizenz

    – Harschware

    25. Februar 2015 um 0:18 Uhr


1646346433 490 Wie bekomme ich eine Liste der aktuell geoffneten FensterProzesse mit
hazz

Dafür gibt es keine plattformneutrale Möglichkeit. In der Version 1.6 von Java ist ein “Schreibtisch” Klasse wurde hinzugefügt, die portable 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 an Java-Prozessen interessiert sind, können Sie die verwenden java.lang.management api zum Abrufen von Thread-/Speicherinformationen auf der JVM.

928100cookie-checkWie bekomme ich eine Liste der aktuell geöffneten Fenster/Prozesse mit Java?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy