我知道在 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。