import promMon as pm import os import subprocess from time import sleep result = subprocess.run(['getconf', 'CLK_TCK'], stdout=subprocess.PIPE) result = result.stdout.decode('utf-8') tikspersec = int(result) def getPIDs(): pids = [] for i in os.listdir("/proc"): if i.isdigit(): pids.append(i) return pids def parseStatus(pid): with open("/proc/"+str(pid)+"/status", "r") as f: status = f.read().replace("\t","").split("\n") status.pop(-1) status_dict = {} for item in status: i = item.split(":") try: k = i[1].split(" ") data = [] for j in k: if j != "": data.append(j) status_dict[i[0]] = data[0]+" "+data[1] except Exception as e: pass return status_dict def parseMeminfo(): with open("/proc/meminfo", "r") as f: meminfo = f.read().split("\n") meminfo_dict = {} for i in meminfo: i = i.split(" ") vals = [] for j in i: if j != "": vals.append(j.replace(":","")) try: meminfo_dict[vals[0]] = int(vals[1]) * byteMult(vals[2]) except: pass return meminfo_dict def byteMult(value): if value == "B": return 1 elif value == "kB": return 1000 elif value == "MB": return 1000000 elif value == "GB": return 1000000000 elif value == "TB": return 1000000000000 def exportProcesses(last_proc_stat=0): pids = getPIDs() processes = {} with open("/proc/uptime", "r") as f: uptime = float(f.read().split(" ")[0]) for pid in pids: try: with open("/proc/"+pid+"/stat", "r") as f: stat = f.read().replace("(", "").split(") ") stat[1] = stat[1].replace('\n', "") s0 = stat[0].split(" ", 1) s1 = stat[1].split(" ") stat = s0 + s1 processes[pid] = {} processes[pid]["id"] = stat[0] processes[pid]["comm"] = stat[1] processes[pid]["virt"] = stat[22] processes[pid]["cpu_tiks_user"] = int(stat[13]) processes[pid]["cpu_tiks_system"] = int(stat[14]) processes[pid]["cpu_secs"] = (int(stat[13]) + int(stat[14])) / tikspersec processes[pid]["page_fault_major"] = stat[11] processes[pid]["page_fault_minor"] = stat[9] processes[pid]["starttime"] = int(stat[21]) / tikspersec processes[pid]["threadcnt"] = stat[19] processes[pid]["state"] = stat[2] processes[pid]["parent_pid"] = stat[3] processes[pid]["runtime_seconds"] = uptime - processes[pid]["starttime"] processes[pid]["cpu_total"] = 100 * processes[pid]["cpu_secs"] / processes[pid]["runtime_seconds"] processes[pid]["cpu"] = 0 if last_proc_stat != 0: try: cpu_secs = processes[pid]["cpu_secs"] - last_proc_stat[pid]["cpu_secs"] sampletime = processes[pid]["runtime_seconds"] - last_proc_stat[pid]["runtime_seconds"] processes[pid]["cpu"] = 100 * cpu_secs / sampletime except: pass status = parseStatus(pid) meminfo = parseMeminfo() memory = status["VmData"].split(" ") if memory[0] == "": memory.pop(0) processes[pid]["memory"] = int(memory[0]) * byteMult(memory[1]) processes[pid]["memory_percent"] = 100 * (int(memory[0]) * byteMult(memory[1])) / meminfo["MemTotal"] except Exception as e: # print(e) pass return processes if __name__ == "__main__": proc = exportProcesses() for i in range(0,10): proc = exportProcesses(proc) for pid in proc: print(proc[pid]) sleep(2)