-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
ps.py
executable file
·116 lines (105 loc) · 4.2 KB
/
ps.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python3
# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""A clone of 'ps aux'.
$ python3 scripts/ps.py
USER PID %MEM VSZ RSS NICE STATUS START TIME CMDLINE
root 1 0.0 220.9M 6.5M sleep Mar27 09:10 /lib/systemd
root 2 0.0 0.0B 0.0B sleep Mar27 00:00 kthreadd
root 4 0.0 0.0B 0.0B -20 idle Mar27 00:00 kworker/0:0H
root 6 0.0 0.0B 0.0B -20 idle Mar27 00:00 mm_percpu_wq
root 7 0.0 0.0B 0.0B sleep Mar27 00:06 ksoftirqd/0
root 8 0.0 0.0B 0.0B idle Mar27 03:32 rcu_sched
root 9 0.0 0.0B 0.0B idle Mar27 00:00 rcu_bh
root 10 0.0 0.0B 0.0B sleep Mar27 00:00 migration/0
root 11 0.0 0.0B 0.0B sleep Mar27 00:00 watchdog/0
root 12 0.0 0.0B 0.0B sleep Mar27 00:00 cpuhp/0
root 13 0.0 0.0B 0.0B sleep Mar27 00:00 cpuhp/1
root 14 0.0 0.0B 0.0B sleep Mar27 00:01 watchdog/1
root 15 0.0 0.0B 0.0B sleep Mar27 00:00 migration/1
[...]
giampaolo 19704 1.5 1.9G 235.6M sleep 17:39 01:11 firefox
root 20414 0.0 0.0B 0.0B idle Apr04 00:00 kworker/4:2
giampaolo 20952 0.0 10.7M 100.0K sleep Mar28 00:00 sh -c /usr
giampaolo 20953 0.0 269.0M 528.0K sleep Mar28 00:00 /usr/lib/
giampaolo 22150 3.3 2.4G 525.5M sleep Apr02 49:09 /usr/lib/
root 22338 0.0 0.0B 0.0B idle 02:04 00:00 kworker/1:2
giampaolo 24123 0.0 35.0M 7.0M sleep 02:12 00:02 bash
"""
import datetime
import time
import psutil
from psutil._common import bytes2human
from psutil._compat import get_terminal_size
def main():
today_day = datetime.date.today()
# fmt: off
templ = "%-10s %5s %5s %7s %7s %5s %6s %6s %6s %s"
attrs = ['pid', 'memory_percent', 'name', 'cmdline', 'cpu_times',
'create_time', 'memory_info', 'status', 'nice', 'username']
print(templ % ("USER", "PID", "%MEM", "VSZ", "RSS", "NICE",
"STATUS", "START", "TIME", "CMDLINE"))
# fmt: on
for p in psutil.process_iter(attrs, ad_value=None):
if p.info['create_time']:
ctime = datetime.datetime.fromtimestamp(p.info['create_time'])
if ctime.date() == today_day:
ctime = ctime.strftime("%H:%M")
else:
ctime = ctime.strftime("%b%d")
else:
ctime = ''
if p.info['cpu_times']:
cputime = time.strftime(
"%M:%S", time.localtime(sum(p.info['cpu_times']))
)
else:
cputime = ''
user = p.info['username']
if not user and psutil.POSIX:
try:
user = p.uids()[0]
except psutil.Error:
pass
if user and psutil.WINDOWS and '\\' in user:
user = user.split('\\')[1]
if not user:
user = ''
user = user[:9]
vms = (
bytes2human(p.info['memory_info'].vms)
if p.info['memory_info'] is not None
else ''
)
rss = (
bytes2human(p.info['memory_info'].rss)
if p.info['memory_info'] is not None
else ''
)
memp = (
round(p.info['memory_percent'], 1)
if p.info['memory_percent'] is not None
else ''
)
nice = int(p.info['nice']) if p.info['nice'] else ''
if p.info['cmdline']:
cmdline = ' '.join(p.info['cmdline'])
else:
cmdline = p.info['name']
status = p.info['status'][:5] if p.info['status'] else ''
line = templ % (
user,
p.info['pid'],
memp,
vms,
rss,
nice,
status,
ctime,
cputime,
cmdline,
)
print(line[: get_terminal_size()[0]])
if __name__ == '__main__':
main()