CMP SHL > Mem =< 200 -> kill process

· EOG, like EOF


3 Alternatives #

. systemd-timer
. earlyoom-style

.

3 while-loop #

check_mem_and_kill_falkon () {
    avail=$(free -h | awk '/Mem:/ {print $7}')

    if [[ $avail == *Gi ]]; then
        avail_mi=$(echo "${avail%Gi}" | awk '{printf "%d", $1 * 1024}')
    else
        avail_mi=$(echo "${avail%Mi}" | awk '{printf "%d", $1}')
    fi

    if (( avail_mi < 200 )); then
        killall falkon 2>/dev/null
    fi
}

while true; do
    check_mem_and_kill_falkon
    sleep 10
done
bash memwatch.sh &

.

3 Faster + more robust: No floating point, no sed #

1while true; do
2    free | awk '/Mem:/ {exit ($7 < 200*1024)}' && killall falkon 2>/dev/null
3    sleep 10
4done
nohup bash ~/memwatch.sh >/dev/null 2>&1 &

.

3 W/ stdout : Option 1: #

 1Threshold=200
 2
 3while true; do
 4    free  | awk '/Mem:/ {print "Threshold: " (200*1024) ". Available: " $7 ". Diff = " $7-(200*1024)}'
 5   #print "Threshold: %s" '$(200*1024)'
 6
 7    free    | awk '/Mem:/ {exit ($7 < 200*1024)}' 
 8    #&& killall falkon 2>/dev/null
 9    sleep 2
10done
11
12echo "Threshold: 204800. Available:s 2311660. Diff = 2106860"
13

.

3 W/ stdout : Option 2: Single awk, no variable, one free call #

 1while true; do
 2    free | awk '
 3        /Mem:/ {
 4            avail_kb=$7
 5            if (avail_kb > 1024*1024)
 6                printf "Available: %.2f GiB\n", avail_kb/1024/1024
 7            else
 8                printf "Available: %.0f MiB\n", avail_kb/1024
 9
10            exit (avail_kb < 200*1024)
11        }
12    ' && killall falkon 2>/dev/null
13    sleep 10
14done

.

3 W/ stdout : Option 3: Timestamped output (nice for logs) #

. No persistent variable . Recalculated every iteration . Human-readable output to stdout . Action triggered on threshold

. pass shell variables into awk via '-v' !!!!!!!!

 1_threshold=200
 2
 3while true; do
 4    free | awk -v threshold="$_threshold" '
 5        /Mem:/ {
 6            printf "%s Threshold: %d. Free = %.0f\n",
 7                  strftime("%T"), threshold, $7/1024
 8            exit ($7 < threshold*1024)
 9        }
10    ' && killall falkon 2>/dev/null
11    sleep 2
12done
13
last updated: