#!/bin/bash if [ $# -ne 2 ]; then echo "Usage:" echo "killbeforecrash [PERCENTAGE MEMORY TRESHOLD] [PID]" exit 1 fi PERCENTAGE_TRESHOLD=$1 if [ $PERCENTAGE_TRESHOLD -lt 0 ] || [ $PERCENTAGE_TRESHOLD -gt 100 ]; then echo "Percentage memory treshold should be in range <0, 100>." exit 2 fi PID=$2 PROCESS_INFO=`ps -A | grep " $PID .* [0-9][0-9]:" | grep -o "[A-z][A-z0-9].*$"` TOTAL_MEMORY=`cat /proc/meminfo | head -n 1 | tail -n 1 | grep -o "[0-9]*"` while true; do DATE=`date +%H:%M:%S` echo -e "[$DATE]\n" FREE_MEMORY=`cat /proc/meminfo | head -n 2 | tail -n 1 | grep -o "[0-9]*"` PERCENTAGE_MEMORY=$(( ($FREE_MEMORY * 100) / $TOTAL_MEMORY )) clear echo "[$DATE] $FREE_MEMORY / $TOTAL_MEMORY ($PERCENTAGE_MEMORY%)" echo "Process that will be killed on too low memory: $PROCESS_INFO" if [ $PERCENTAGE_MEMORY -lt $PERCENTAGE_TRESHOLD ]; then echo "Memory too low! Killing process..." kill -s SIGKILL $PID exit 0 fi sleep 1s done