Wie listet man einen Prozessbaum unter Windows auf?

Wie listet man einen Prozessbaum unter Windows auf?

Ich weiß, dass der Befehl unter Linux sehr nützlich ist pstreeund so etwas in der Art suche ich … aber wie erstelle ich eine detaillierte Prozessliste (einen Prozessbaum) auf einem Windows-Terminal?

Antwort1

Sie können ein Programm namensProzessmonitor. Mit diesem Programm können Sie tun, was Sie möchten.

Process Monitor ist ein erweitertes Überwachungstool für Windows, das Dateisystem, Registry und Prozess-/Thread-Aktivität in Echtzeit anzeigt. Es kombiniert die Funktionen von zwei älteren Sysinternals-Dienstprogrammen, Filemon und Regmon, und fügt eine umfangreiche Liste von Verbesserungen hinzu, darunter umfangreiche und zerstörungsfreie Filterung, umfassende Ereigniseigenschaften wie Sitzungs-IDs und Benutzernamen, zuverlässige Prozessinformationen, vollständige Thread-Stapel mit integrierter Symbolunterstützung für jeden Vorgang, gleichzeitige Protokollierung in einer Datei und vieles mehr. Seine einzigartig leistungsstarken Funktionen machen Process Monitor zu einem zentralen Dienstprogramm in Ihrem Toolkit zur Systemfehlerbehebung und Malware-Suche.

Es bietet außerdem genau das, was Sie wollen:

Das Prozessbaum-Tool zeigt die Beziehungen aller Prozesse, auf die in einer Ablaufverfolgung verwiesen wird.

Antwort2

Verwendung pslist64.exe -tabSysInternals.

Antwort3

VersuchenProzess-Explorervon Sysinternals. Es ist wie ein erweiterter Task-Manager, es gibt auch eine Baumansicht.

Antwort4

Dieses Powershell-Cmdlet Print-ProcessTreelistet einen primitiven Prozessbaum auf.

function Print-ProcessTree() {

    function Get-ProcessAndChildProcesses($Level, $Process) {
        "{0}[{1,-5}] [{2}]" -f ("  " * $Level), $Process.ProcessId, $Process.Name
        $Children = $AllProcesses | where-object {$_.ParentProcessId -eq $Process.ProcessId -and $_.CreationDate -ge $Process.CreationDate}
        if ($null -ne $Children) {
            foreach ($Child in $Children) {
                Get-ProcessAndChildProcesses ($Level + 1) $Child
            }
        }
    }

    $AllProcesses = Get-CimInstance -ClassName "win32_process"
    $RootProcesses = @()
    # Process "System Idle Process" is processed differently, as ProcessId and ParentProcessId are 0
    # $AllProcesses is sliced from index 1 to the end of the array
    foreach ($Process in $AllProcesses[1..($AllProcesses.length-1)]) {
        $Parent = $AllProcesses | where-object {$_.ProcessId -eq $Process.ParentProcessId -and $_.CreationDate -lt $Process.CreationDate}
        if ($null -eq $Parent) {
            $RootProcesses += $Process
        }
    }
    # Process the "System Idle process" separately
    "[{0,-5}] [{1}]" -f $AllProcesses[0].ProcessId, $AllProcesses[0].Name
    foreach ($Process in $RootProcesses) {
        Get-ProcessAndChildProcesses 0 $Process
    }
}

Modifiziert vonactualadmins.nl.

verwandte Informationen