¿Cómo enumerar un árbol de procesos en Windows?

¿Cómo enumerar un árbol de procesos en Windows?

Sé que en Linux es muy útil el pstreecomando 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-ProcessTreeenumerará 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.

información relacionada