# tested with python3 only !! import os import time import pwd from datetime import datetime import threading def get_process_info(pid): try: with open(f"/proc/{pid}/status") as f: status_data = f.read() with open(f"/proc/{pid}/cmdline") as f: cmdline_data = f.read().replace("\0", " ").strip() status_lines = status_data.splitlines() process_info = {"pid": pid} for line in status_lines: if line.startswith("Name:"): process_info["name"] = line.split(":", 1)[1].strip() elif line.startswith("Uid:"): uid = int(line.split(":", 1)[1].strip().split()[0]) process_info["username"] = pwd.getpwuid(uid).pw_name process_info["cmdline"] = cmdline_data return process_info except FileNotFoundError: return None def get_current_processes(): process_list = [] try: for pid in os.listdir("/proc"): if pid.isdigit(): process_info = get_process_info(pid) if process_info: process_list.append(process_info) except: return 0 return process_list def check_new_processes(prev_processes, current_processes): new_processes = [p for p in current_processes if p not in prev_processes] return new_processes def print_process(process_info): current_time = datetime.now().strftime("%H:%M:%S") print( f"{current_time} " f"{process_info['pid']:<6} " f"{process_info['username']:<10} " f"{process_info['name']:<30} " f"{process_info['cmdline']:<60}" ) def worker_thread(): global prev_processes global stop_threads while not stop_threads: current_processes = get_current_processes() if current_processes == 0: pass else: new_processes = check_new_processes(prev_processes, current_processes) if new_processes: for new_process in new_processes: print_process(new_process) prev_processes = current_processes time.sleep(0.0001) if __name__ == "__main__": try: print(f"{'TIME':<19} {'PID':<6} {'USER':<10} {'NAME':<30} {'CMDLINE':<60}") print("-" * 125) global prev_processes global stop_threads stop_threads = False prev_processes = get_current_processes() for process in prev_processes: print_process(process) worker = threading.Thread(target=worker_thread) worker.start() except KeyboardInterrupt: print("\nProcess monitor stopped.") stop_threads = True