
Sé que en Linux es muy útil el pstree
comando y algo así es lo que estoy buscando... pero ¿cómo hacer una lista (árbol) de procesos detallada en la terminal de Windows?
Respuesta1
Podrías usar un programa llamadoMonitor de proceso. Este programa te permite hacer lo que quieras.
Process Monitor es una herramienta de monitoreo avanzada para Windows que muestra el sistema de archivos, el Registro y la actividad de procesos/hilos en tiempo real. Combina las características de dos utilidades Sysinternals heredadas, Filemon y Regmon, y agrega una extensa lista de mejoras que incluyen filtrado enriquecido y no destructivo, propiedades integrales de eventos como ID de sesión y nombres de usuario, información confiable de procesos, pilas completas de subprocesos con soporte de símbolos integrado. para cada operación, registro simultáneo en un archivo y mucho más. Sus características excepcionalmente poderosas harán de Process Monitor una utilidad central en su kit de herramientas de búsqueda de malware y solución de problemas del sistema.
También proporciona exactamente lo que desea:
La herramienta de árbol de procesos muestra la relación de todos los procesos a los que se hace referencia en un seguimiento.
Respuesta2
Usarpslist64.exe -t
desdeSistemas internos.
Respuesta3
IntentarExportador de procesosde Sysinternals. Es como un administrador de tareas avanzado, también hay una vista de árbol.
Respuesta4
Este cmdlet de PowerShell Print-ProcessTree
enumerará un árbol de procesos primitivo.
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
}
}
Modificado deactualadmins.nl.