summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Schlömer <nico.schloemer@gmail.com>2021-11-14 18:51:47 +0100
committerGitHub <noreply@github.com>2021-11-14 18:51:47 +0100
commit030e5032ff1889b86abe980028bde3a15f20e226 (patch)
tree7839b1eeaf5f8288e1ff042f8a6cc67762923d96
parent42f2744cef94b10c3bc86af907e1e6351b82448f (diff)
parentde5d38a73bddcc2e2828ae7130b1b89f583895db (diff)
Merge pull request #17 from nschloe/procs-fixv0.0.6
procs fix
-rw-r--r--setup.cfg2
-rw-r--r--src/tiptop/_procs_list.py41
2 files changed, 33 insertions, 10 deletions
diff --git a/setup.cfg b/setup.cfg
index 794f57c..21c1ae7 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = tiptop
-version = 0.0.5
+version = 0.0.6
author = Nico Schlömer
author_email = nico.schloemer@gmail.com
description = A better top
diff --git a/src/tiptop/_procs_list.py b/src/tiptop/_procs_list.py
index bd6534e..14f583c 100644
--- a/src/tiptop/_procs_list.py
+++ b/src/tiptop/_procs_list.py
@@ -40,7 +40,11 @@ class ProcsList(Widget):
]
processes = sorted(
psutil.process_iter(attrs),
- key=lambda item: item.info["cpu_percent"],
+ # The item.info["cpu_percent"] can be `ad_value` (default None).
+ # It gets assigned to a dict key in case AccessDenied or
+ # ZombieProcess exception is raised when retrieving that particular
+ # process information.
+ key=lambda item: (item.info["cpu_percent"] or 0.0),
reverse=True,
)
@@ -60,17 +64,36 @@ class ProcsList(Widget):
table.add_column("[u]cpu%[/]", width=5, no_wrap=True)
for p in processes[: self.max_num_procs]:
+ # Everything can be None here, see comment above
+ pid = p.info["pid"]
+ pid = "" if pid is None else f"{pid:6d}"
+ #
+ name = p.info["name"]
+ if name is None:
+ name = ""
+ #
+ cmdline = p.info["cmdline"]
+ cmdline = "" if cmdline is None else " ".join(p.info["cmdline"][1:])
+ #
+ num_threads = p.info["num_threads"]
+ num_threads = "" if num_threads is None else f"{num_threads:3d}"
+ #
+ username = p.info["username"]
+ if username is None:
+ username = ""
+ #
+ mem_info = p.info["memory_info"]
+ mem_info = (
+ "" if mem_info is None else sizeof_fmt(mem_info.rss, suffix="", sep="")
+ )
+ #
+ cpu_percent = p.info["cpu_percent"]
+ cpu_percent = "" if cpu_percent is None else f"{cpu_percent:5.1f}"
table.add_row(
- f"{p.info['pid']:6d}",
- p.info["name"],
- " ".join(p.info["cmdline"][1:]),
- f"{p.info['num_threads']:3d}",
- p.info["username"],
- sizeof_fmt(p.info["memory_info"].rss, suffix="", sep=""),
- f"{p.info['cpu_percent']:5.1f}",
+ pid, name, cmdline, num_threads, username, mem_info, cpu_percent
)
- total_num_threads = sum(p.info["num_threads"] for p in processes)
+ total_num_threads = sum((p.info["num_threads"] or 0) for p in processes)
num_sleep = sum(p.info["status"] == "sleeping" for p in processes)
self.panel = Panel(