2017-07-28 111 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)來獲取它。 –