2014-06-19 04:56:02 +04:00
|
|
|
# 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
|