#!/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