12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- # 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
|