psutil

Форк
0
/
pmap.py 
68 строк · 2.2 Кб
1
#!/usr/bin/env python3
2

3
# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
4
# Use of this source code is governed by a BSD-style license that can be
5
# found in the LICENSE file.
6

7
"""A clone of 'pmap' utility on Linux, 'vmmap' on macOS and 'procstat
8
-v' on BSD. Report memory map of a process.
9

10
$ python3 scripts/pmap.py 32402
11
Address                 RSS  Mode    Mapping
12
0000000000400000      1200K  r-xp    /usr/bin/python2.7
13
0000000000838000         4K  r--p    /usr/bin/python2.7
14
0000000000839000       304K  rw-p    /usr/bin/python2.7
15
00000000008ae000        68K  rw-p    [anon]
16
000000000275e000      5396K  rw-p    [heap]
17
00002b29bb1e0000       124K  r-xp    /lib/x86_64-linux-gnu/ld-2.17.so
18
00002b29bb203000         8K  rw-p    [anon]
19
00002b29bb220000       528K  rw-p    [anon]
20
00002b29bb2d8000       768K  rw-p    [anon]
21
00002b29bb402000         4K  r--p    /lib/x86_64-linux-gnu/ld-2.17.so
22
00002b29bb403000         8K  rw-p    /lib/x86_64-linux-gnu/ld-2.17.so
23
00002b29bb405000        60K  r-xp    /lib/x86_64-linux-gnu/libpthread-2.17.so
24
00002b29bb41d000         0K  ---p    /lib/x86_64-linux-gnu/libpthread-2.17.so
25
00007fff94be6000        48K  rw-p    [stack]
26
00007fff94dd1000         4K  r-xp    [vdso]
27
ffffffffff600000         0K  r-xp    [vsyscall]
28
...
29
"""
30

31
import sys
32

33
import psutil
34
from psutil._common import bytes2human
35
from psutil._compat import get_terminal_size
36

37

38
def safe_print(s):
39
    s = s[: get_terminal_size()[0]]
40
    try:
41
        print(s)
42
    except UnicodeEncodeError:
43
        print(s.encode('ascii', 'ignore').decode())
44

45

46
def main():
47
    if len(sys.argv) != 2:
48
        sys.exit('usage: pmap <pid>')
49
    p = psutil.Process(int(sys.argv[1]))
50
    templ = "%-20s %10s  %-7s %s"
51
    print(templ % ("Address", "RSS", "Mode", "Mapping"))
52
    total_rss = 0
53
    for m in p.memory_maps(grouped=False):
54
        total_rss += m.rss
55
        line = templ % (
56
            m.addr.split('-')[0].zfill(16),
57
            bytes2human(m.rss),
58
            m.perms,
59
            m.path,
60
        )
61
        safe_print(line)
62
    print("-" * 31)
63
    print(templ % ("Total", bytes2human(total_rss), '', ''))
64
    safe_print("PID = %s, name = %s" % (p.pid, p.name()))
65

66

67
if __name__ == '__main__':
68
    main()
69

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.