
Ich weiß, dass der Befehl unter Linux sehr nützlich ist pstree
und 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 -t
abSysInternals.
Antwort3
VersuchenProzess-Explorervon Sysinternals. Es ist wie ein erweiterter Task-Manager, es gibt auch eine Baumansicht.
Antwort4
Dieses Powershell-Cmdlet Print-ProcessTree
listet 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.