进程和子进程信息(内存)
Process and subprocesses information(memory)
Get-Process -Id <pid>
returns 仅有关该特定进程的信息,但有关此进程调用的所有信息。
有没有办法知道一个进程占用的所有内存以及该进程创建的所有进程?
在 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
, as Jean-François Fabre suggested in the 。
import psutil
parent = psutil.Process(123)
for child in parent.children(recursive=True):
print(child.memory_info().rss)
如果您想要进程的总分配虚拟内存而不是它们当时使用的物理内存,请将 rss
替换为 vms
。
Get-Process -Id <pid>
returns 仅有关该特定进程的信息,但有关此进程调用的所有信息。
有没有办法知道一个进程占用的所有内存以及该进程创建的所有进程?
在 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
, as Jean-François Fabre suggested in the
import psutil
parent = psutil.Process(123)
for child in parent.children(recursive=True):
print(child.memory_info().rss)
如果您想要进程的总分配虚拟内存而不是它们当时使用的物理内存,请将 rss
替换为 vms
。