I am new to python and I have a simple problem of finding the top processes using the CPU. I was able to do it in shell using ps and sort.
I have checked few but links but it do not help partly because the function is defined as below,
define find_proc(ps_input)
ps_input will be something like below,
PID CPU PROG 12658 20 ABC 19265 80 BCD 21265 60 BAD 19655 11 BCE
Can someone help me in this program..
Thanks in advance.
Advertisement
Answer
psutil is the one I would recommend. From the PyPI site, here is the package description,
psutil (process and system utilities) is a cross-platform library for retrieving information on running processes and system utilization (CPU, memory, disks, network, sensors) in Python. It is useful mainly for system monitoring, profiling and limiting process resources and management of running processes. It implements many functionalities offered by UNIX command line tools such as: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap.
To address your problem statement, here is the sample I took from the site which list outs process sorted by memory – https://thispointer.com/python-get-list-of-all-running-processes-and-sort-by-highest-memory-usage/
def getListOfProcessSortedByMemory(): ''' Get list of running process sorted by Memory Usage ''' listOfProcObjects = [] # Iterate over the list for proc in psutil.process_iter(): try: # Fetch process details as dict pinfo = proc.as_dict(attrs=['pid', 'name', 'username']) pinfo['vms'] = proc.memory_info().vms / (1024 * 1024) # Append dict to list listOfProcObjects.append(pinfo); except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass # Sort list of dict by key vms i.e. memory usage listOfProcObjects = sorted(listOfProcObjects, key=lambda procObj: procObj['vms'], reverse=True) return listOfProcObjects
Complete code is available in the above site; you may need to tweak accordingly to list based on cpu usage. Hope this helps.