【问题标题】:Process and subprocesses information(memory)进程和子进程信息(内存)
【发布时间】:2017-07-28 07:02:35
【问题描述】:
Get-Process -Id <pid>

仅返回有关该特定进程的信息,但该进程调用的所有信息如何。

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

【问题讨论】:

  • 检查psutil 模块怎么样? (对于蟒蛇)
  • 我不熟悉?有用吗?
  • 超级好用!!!
  • 你能告诉我可用于获取进程内存及其由该进程调用的子进程的命令吗:)
  • 不知道。检查文档。

标签: python-2.7 powershell windows-10 wmi


【解决方案1】:

在 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çois Fabre 在 comments 中所建议的那样。

import psutil

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

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

【讨论】:

  • 一个进程的taskmgr.exe中显示的内存与显示的rss不一样,你能告诉我原因吗?
  • 任务管理器显示工作集的私有字节。 memory_info() 不提供该信息 AFAICS,因此您可能需要类似 this 的信息来获取它。
猜你喜欢
  • 2012-03-23
  • 2020-02-19
  • 2014-10-19
  • 2015-06-17
  • 2018-09-16
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 2017-07-22
相关资源
最近更新 更多