如何在 Windows 上列出进程树?

如何在 Windows 上列出进程树?

我知道在 Linux 中这个pstree命令非常有用,而类似的东西正是我正在寻找的......但是如何在 Windows 终端上制作详细的进程列表(树)?

答案1

你可以使用一个名为进程监控。这个程序可以让你做你想做的事。

Process Monitor 是一款适用于 Windows 的高级监控工具,可显示实时文件系统、注册表和进程/线程活动。它结合了两个旧版 Sysinternals 实用程序 Filemon 和 Regmon 的功能,并添加了一系列增强功能,包括丰富且无损的过滤、全面的事件属性(如会话 ID 和用户名)、可靠的进程信息、完整的线程堆栈(每个操作均带有集成符号支持)、同时记录到文件等。其独特而强大的功能将使 Process Monitor 成为系统故障排除和恶意软件搜寻工具包中的核心实用程序。

它还提供了您想要的东西:

进程树工具显示跟踪中引用的所有进程的关系。

答案2

使用pslist64.exe -t系统内部

答案3

尝试进程解析器来自 Sysinternals。它就像一个高级任务管理器,还有一个树形视图。

答案4

此 powershell cmdletPrint-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

相关内容