2017-07-28 69 views
0
Get-Process -Id <pid> 

只返回关于该特定进程的信息,但是该进程调用的所有信息又是如何处理的。进程和子进程信息(内存)

有没有什么办法可以知道进程所创建的所有内存以及该进程创建的所有进程?

+0

如何检查'psutil'模块? (for python) –

+0

我不熟悉它吗?它有用吗? – Akash

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

然后调用Get-Process与PID和扩充内存信息:

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

更换WorkingSetVirtualMemorySize如果您想要的是进程的总分配虚拟内存,而不是他们当时使用的物理内存。


在Python你使用该模块psutil,让 - 弗朗索瓦·法布尔在comments建议。

import psutil 

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

,如果你想的过程,而不是他们使用的是当时的物理内存的总分配的虚拟内存vms更换rss

+0

显示在一个进程taskmgr.exe中的内存与rss显示的内存不一样,你能告诉我原因吗? – Akash

+0

任务管理器显示工作集的专用字节。 'memory_info()'不提供信息AFAICS,所以你可能需要[this](https://stackoverflow.com/a/33228050/1630171)来获取它。 –