psutil

Форк
0
/
ps.py 
116 строк · 4.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 'ps aux'.
8

9
$ python3 scripts/ps.py
10
USER         PID  %MEM     VSZ     RSS  NICE STATUS  START   TIME  CMDLINE
11
root           1   0.0  220.9M    6.5M        sleep  Mar27  09:10  /lib/systemd
12
root           2   0.0    0.0B    0.0B        sleep  Mar27  00:00  kthreadd
13
root           4   0.0    0.0B    0.0B   -20   idle  Mar27  00:00  kworker/0:0H
14
root           6   0.0    0.0B    0.0B   -20   idle  Mar27  00:00  mm_percpu_wq
15
root           7   0.0    0.0B    0.0B        sleep  Mar27  00:06  ksoftirqd/0
16
root           8   0.0    0.0B    0.0B         idle  Mar27  03:32  rcu_sched
17
root           9   0.0    0.0B    0.0B         idle  Mar27  00:00  rcu_bh
18
root          10   0.0    0.0B    0.0B        sleep  Mar27  00:00  migration/0
19
root          11   0.0    0.0B    0.0B        sleep  Mar27  00:00  watchdog/0
20
root          12   0.0    0.0B    0.0B        sleep  Mar27  00:00  cpuhp/0
21
root          13   0.0    0.0B    0.0B        sleep  Mar27  00:00  cpuhp/1
22
root          14   0.0    0.0B    0.0B        sleep  Mar27  00:01  watchdog/1
23
root          15   0.0    0.0B    0.0B        sleep  Mar27  00:00  migration/1
24
[...]
25
giampaolo  19704   1.5    1.9G  235.6M        sleep  17:39  01:11  firefox
26
root       20414   0.0    0.0B    0.0B         idle  Apr04  00:00  kworker/4:2
27
giampaolo  20952   0.0   10.7M  100.0K        sleep  Mar28  00:00  sh -c /usr
28
giampaolo  20953   0.0  269.0M  528.0K        sleep  Mar28  00:00  /usr/lib/
29
giampaolo  22150   3.3    2.4G  525.5M        sleep  Apr02  49:09  /usr/lib/
30
root       22338   0.0    0.0B    0.0B         idle  02:04  00:00  kworker/1:2
31
giampaolo  24123   0.0   35.0M    7.0M        sleep  02:12  00:02  bash
32
"""
33

34
import datetime
35
import time
36

37
import psutil
38
from psutil._common import bytes2human
39
from psutil._compat import get_terminal_size
40

41

42
def main():
43
    today_day = datetime.date.today()
44
    # fmt: off
45
    templ = "%-10s %5s %5s %7s %7s %5s %6s %6s %6s  %s"
46
    attrs = ['pid', 'memory_percent', 'name', 'cmdline', 'cpu_times',
47
             'create_time', 'memory_info', 'status', 'nice', 'username']
48
    print(templ % ("USER", "PID", "%MEM", "VSZ", "RSS", "NICE",
49
                   "STATUS", "START", "TIME", "CMDLINE"))
50
    # fmt: on
51
    for p in psutil.process_iter(attrs, ad_value=None):
52
        if p.info['create_time']:
53
            ctime = datetime.datetime.fromtimestamp(p.info['create_time'])
54
            if ctime.date() == today_day:
55
                ctime = ctime.strftime("%H:%M")
56
            else:
57
                ctime = ctime.strftime("%b%d")
58
        else:
59
            ctime = ''
60
        if p.info['cpu_times']:
61
            cputime = time.strftime(
62
                "%M:%S", time.localtime(sum(p.info['cpu_times']))
63
            )
64
        else:
65
            cputime = ''
66

67
        user = p.info['username']
68
        if not user and psutil.POSIX:
69
            try:
70
                user = p.uids()[0]
71
            except psutil.Error:
72
                pass
73
        if user and psutil.WINDOWS and '\\' in user:
74
            user = user.split('\\')[1]
75
        if not user:
76
            user = ''
77
        user = user[:9]
78
        vms = (
79
            bytes2human(p.info['memory_info'].vms)
80
            if p.info['memory_info'] is not None
81
            else ''
82
        )
83
        rss = (
84
            bytes2human(p.info['memory_info'].rss)
85
            if p.info['memory_info'] is not None
86
            else ''
87
        )
88
        memp = (
89
            round(p.info['memory_percent'], 1)
90
            if p.info['memory_percent'] is not None
91
            else ''
92
        )
93
        nice = int(p.info['nice']) if p.info['nice'] else ''
94
        if p.info['cmdline']:
95
            cmdline = ' '.join(p.info['cmdline'])
96
        else:
97
            cmdline = p.info['name']
98
        status = p.info['status'][:5] if p.info['status'] else ''
99

100
        line = templ % (
101
            user,
102
            p.info['pid'],
103
            memp,
104
            vms,
105
            rss,
106
            nice,
107
            status,
108
            ctime,
109
            cputime,
110
            cmdline,
111
        )
112
        print(line[: get_terminal_size()[0]])
113

114

115
if __name__ == '__main__':
116
    main()
117

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

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

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

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