# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. import os, sys, ctypes, ctypes.wintypes class VM_COUNTERS(ctypes.Structure): _fields_ = [("PeakVirtualSize", ctypes.wintypes.ULONG), ("VirtualSize", ctypes.wintypes.ULONG), ("PageFaultCount", ctypes.wintypes.ULONG), ("PeakWorkingSetSize", ctypes.wintypes.ULONG), ("WorkingSetSize", ctypes.wintypes.ULONG), ("QuotaPeakPagedPoolUsage", ctypes.wintypes.ULONG), ("QuotaPagedPoolUsage", ctypes.wintypes.ULONG), ("QuotaPeakNonPagedPoolUsage", ctypes.wintypes.ULONG), ("QuotaNonPagedPoolUsage", ctypes.wintypes.ULONG), ("PagefileUsage", ctypes.wintypes.ULONG), ("PeakPagefileUsage", ctypes.wintypes.ULONG) ] def get_vmsize(handle): """ Return (peak_virtual_size, virtual_size) for the process |handle|. """ ProcessVmCounters = 3 vmc = VM_COUNTERS() if ctypes.windll.ntdll.NtQueryInformationProcess(int(handle), ProcessVmCounters, ctypes.byref(vmc), ctypes.sizeof(vmc), None) == 0: return (vmc.PeakVirtualSize, vmc.VirtualSize) return (-1, -1) if __name__ == '__main__': PROCESS_QUERY_INFORMATION = 0x0400 for pid in sys.argv[1:]: handle = ctypes.windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION, 0, # no inherit int(pid)) if handle: print "Process %s:" % pid vsize, peak_vsize = get_vmsize(handle) print "peak vsize: %d" % peak_vsize ctypes.windll.kernel32.CloseHandle(handle) else: print "Couldn't open process %s" % pid