进程和子进程信息(内存)

时间:2017-07-28 07:02:35

标签: python-2.7 powershell windows-10 wmi

Get-Process -Id <pid>

只返回有关该特定进程的信息,但是该进程调用的所有信息呢。

有没有办法知道进程占用的所有内存以及该进程创建的所有进程?

1 个答案:

答案 0 :(得分:0)

在PowerShell中,您将定义一个递归函数来枚举给定进程的子进程:

function Get-ChildProcesses {
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        [int[]]$ProcessId
    )

    Process {
        $ProcessId | ForEach-Object {
            $_
            Get-WmiObject -Class Win32_Process -Filter "ParentProcessID=$_" |
                Select-Object -Expand ProcessId |
                Get-ChildProcesses
        }
    }
}

然后用这些PID调用Get-Process并扩展内存信息:

Get-Process -Id (Get-ChildProcesses 123) | Select-Object -Expand WorkingSet

如果您想要进程的总分配虚拟内存而不是当时正在使用的物理内存,请将WorkingSet替换为VirtualMemorySize

在Python中,您使用模块psutil,正如Jean-FrançoisFabre在comments中所建议的那样。

import psutil

parent = psutil.Process(123)
for child in parent.children(recursive=True):
    print(child.memory_info().rss)

如果您想要进程的总分配虚拟内存而不是当时正在使用的物理内存,请将rss替换为vms