Как составить список дерева процессов в Windows?

Как составить список дерева процессов в Windows?

Я знаю, что в Linux это очень полезная pstreeкоманда, и что-то подобное я ищу... но как создать подробный список процессов (дерево) в терминале Windows?

решение1

Вы можете использовать программу под названиемМонитор процесса. Эта программа позволяет вам делать то, что вы хотите.

Process Monitor — это усовершенствованный инструмент мониторинга для Windows, который показывает файловую систему, реестр и активность процессов/потоков в реальном времени. Он объединяет функции двух устаревших утилит Sysinternals, Filemon и Regmon, и добавляет обширный список улучшений, включая богатую и неразрушающую фильтрацию, комплексные свойства событий, такие как идентификаторы сеансов и имена пользователей, надежную информацию о процессах, полные стеки потоков с интегрированной поддержкой символов для каждой операции, одновременную запись в файл и многое другое. Его уникальные мощные функции сделают Process Monitor основной утилитой в вашем наборе инструментов для устранения неполадок системы и поиска вредоносных программ.

Он также предоставляет именно то, что вам нужно:

Инструмент дерева процессов показывает взаимосвязь всех процессов, упомянутых в трассировке.

решение2

Использовать pslist64.exe -tизSysInternals.

решение3

ПытатьсяПроцесс Экспорерот Sysinternals. Это как расширенный менеджер задач, есть также древовидный вид.

решение4

Этот командлет PowerShell Print-ProcessTreeвыведет список примитивного дерева процессов.

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
    }
}

Изменено изactualadmins.nl.

Связанный контент