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

は、特定のプロセスに関する情報だけを返しますが、このプロセスによって呼び出されたすべての情報は返されません。プロセスとサブプロセスの情報(メモリ)

プロセスによって取得されたすべてのメモリとそのプロセスによって作成されたすべてのプロセスを知る方法はありますか? PowerShellで

+0

'psutil'モジュールのチェックはどうですか? (Python用) –

+0

私はそれに精通していませんか?それは役に立ちますか? – Akash

+0

超便利! –

答えて

0

あなたが与えられたプロセスの子プロセスを列挙するために再帰関数を定義したい:

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 

は交換してくださいWorkingSetVirtualMemorySizeを使用している場合は、その時点で使用している物理メモリではなく、プロセスの割り当てられた仮想メモリの合計が必要です。 Pythonで


ジャン・フランソワ・ファーブルはcommentsで提案されているように、あなたは、モジュールpsutilを使用すると思います。あなたがプロセスではなく、彼らが一度に使用している物理メモリの合計割り当てられた仮想メモリをしたい場合は

import psutil 

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

vmsrssを交換してください。

+0

プロセスのtaskmgr.exeに示されているメモリは、rssが表示しているものと同じではありません。理由を教えてください。 – Akash

+0

タスクマネージャは、ワーキングセットのプライベートバイトを表示します。 'memory_info()'はその情報をAFAICSに提供しないので、取得するには[this](https://stackoverflow.com/a/33228050/1630171)のようなものが必要でしょう。 –

関連する問題