diff --git a/background_job.py b/background_job.py new file mode 100644 index 0000000..7837bad --- /dev/null +++ b/background_job.py @@ -0,0 +1,73 @@ +#!/usr/bin/python3 + +from time import sleep +import psutil +from plyer import notification + + +def ram_perc(): + return psutil.virtual_memory()[2] + + +def swap_perc(): + return psutil.swap_memory()[3] + + +def get_pwmmu(): + pwmmu = ["", 0, 0] # pwmmu = Process With Most Memory Usage + + for process in psutil.process_iter(): + try: + process_name = process.name() + process_usage = process.memory_info().vms / (1024 * 1024) + process_id = process.pid + + if process_usage > pwmmu[1]: + pwmmu = [process_name, process_usage, process_id] + + except: + pass + + print(pwmmu) + return pwmmu + + +def kill_process(process_pid): + for process in psutil.process_iter(): + if process.pid == process_pid: + process.kill() + + +def ram_almost_full(): + notification.notify( + title="Your RAM is almost full", + message=f"Your RAM usage is over 90%!\nRam usage: {ram_perc()}%\nSwap usage: {swap_perc()}%", + timeout=10, + ) + + +def ram_full(): + pwmmu = get_pwmmu() + kill_process(pwmmu[2]) + + notification.notify( + title="Your memory is full, killed process with most memory usage.", + message=f"Your memory usage was higher than 98%, automatically killed process with most memory usage.\nRam usage: {ram_perc()}%\nSwap usage: {swap_perc()}%\n Killed process: {pwmmu[0]}", + timeout=10, + ) + + +def loop(): + while True: + ram_usage = ram_perc() + swap_usage = swap_perc() + + if ram_usage >= 98 and swap_usage >= 98: + ram_full() + + elif ram_usage >= 90: + ram_almost_full() + + +if __name__ == "__main__": + loop()