Como listar uma árvore de processos no Windows?

Como listar uma árvore de processos no Windows?

Eu sei que no Linux é muito útil o pstreecomando e algo assim é o que procuro... mas como fazer uma lista detalhada de processos (árvore) no terminal Windows?

Responder1

Você poderia usar um programa chamadoMonitor de Processo. Este programa permite que você faça o que quiser.

Process Monitor é uma ferramenta avançada de monitoramento para Windows que mostra o sistema de arquivos, registro e atividade de processo/thread em tempo real. Ele combina os recursos de dois utilitários legados da Sysinternals, Filemon e Regmon, e adiciona uma extensa lista de melhorias, incluindo filtragem rica e não destrutiva, propriedades de eventos abrangentes, como IDs de sessão e nomes de usuário, informações confiáveis ​​de processo, pilhas completas de threads com suporte a símbolos integrados. para cada operação, registro simultâneo em um arquivo e muito mais. Seus recursos exclusivos e poderosos farão do Process Monitor um utilitário essencial no kit de ferramentas de solução de problemas do sistema e de caça a malware.

Ele também fornece exatamente o que você deseja:

A ferramenta de árvore de processos mostra o relacionamento de todos os processos referenciados em um rastreamento.

Responder2

Usar pslist64.exe -tdeSysInternals.

Responder3

TentarExplorador de processosda Sysinternals. É como um gerenciador de tarefas avançado, também há uma visualização em árvore.

Responder4

Este cmdlet do PowerShell Print-ProcessTreelistará uma árvore de processos primitivos.

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.

informação relacionada