Top system processes with color!
This commit is contained in:
1 parent
b9ba73c1ef
commit
4ba77890d6
1 file changed
+72
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env python3
|
||||
# Description: Displays top system processes with color.
|
||||
# Usage: python3 color-top.py
|
||||
# Author: Justin Oros
|
||||
# Source: https://github.com/JustinOros
|
||||
|
||||
import os
|
||||
import time
|
||||
import psutil
|
||||
import sys
|
||||
import select
|
||||
import socket
|
||||
import argparse
|
||||
|
||||
GREEN = "\033[32m"
|
||||
YELLOW = "\033[33m"
|
||||
ORANGE = "\033[38;5;214m"
|
||||
RED = "\033[31m"
|
||||
RESET = "\033[0m"
|
||||
|
||||
def get_top_processes(limit):
|
||||
processes = []
|
||||
for proc in psutil.process_iter(['cpu_percent', 'name', 'username']):
|
||||
try:
|
||||
cpu = proc.info['cpu_percent']
|
||||
if cpu is not None:
|
||||
processes.append((cpu, proc.info['name'], proc.info['username']))
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
||||
continue
|
||||
processes.sort(reverse=True, key=lambda p: p[0])
|
||||
return processes[:limit]
|
||||
|
||||
def colorize(cpu, name, user):
|
||||
color = GREEN if cpu <= 25 else YELLOW if cpu <= 50 else ORANGE if cpu <= 75 else RED
|
||||
cpu_str = f"{cpu:.2f}%" # Displaying CPU usage with 2 decimal places
|
||||
return f"{color}{cpu_str}, {name}, {user}{RESET}"
|
||||
|
||||
def print_processes(limit):
|
||||
os.system('clear')
|
||||
top_processes = get_top_processes(limit)
|
||||
hostname = socket.gethostname()
|
||||
|
||||
header = f"Top {limit} Running Processes ({hostname}):"
|
||||
print(header)
|
||||
print("-" * len(header))
|
||||
|
||||
for idx, (cpu, name, user) in enumerate(top_processes, start=1):
|
||||
print(colorize(cpu, name, user))
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Monitor system processes by CPU usage.")
|
||||
parser.add_argument("-n", "--number", type=int, default=10, help="Number of processes to monitor (default is 10).")
|
||||
|
||||
args = parser.parse_args()
|
||||
limit = args.number
|
||||
|
||||
try:
|
||||
while True:
|
||||
print_processes(limit)
|
||||
time.sleep(1)
|
||||
|
||||
if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
|
||||
input_char = sys.stdin.read(1)
|
||||
if input_char.lower() == 'q':
|
||||
print("Exiting...")
|
||||
break
|
||||
except KeyboardInterrupt:
|
||||
print("\nProgram interrupted. Exiting...")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in new issue
Block a user