#!/bin/bash sum() { local total=0 n for n in $* do total=$((total + n)) done echo $total } last() { local n=$1 shift set -- $* while [ $# -ge "$n" ] do shift done printf '%s\n' "$*" } iotop_reader() { log= pct_log= while read line do case "$line" in "Total DISK"*) pct=$(sum $pct_log) [ "$pct" -ge 85 ] && over=y || over= pct_log= if [ "$over" ] then log=$(last 10 $log 1) over= sum=$(sum $log) if [ "$(sum $log)" -gt 4 ] then log= # this is year zero; all past history is erased. ( set -x kill $pids ) fi else log=$(last 10 $log 0) fi case "$log" in *1* ) echo IO '!!' $log >&2 ;; # * ) # echo IO OK $log >&2 # ;; esac ;; "Current DISK"*) continue ;; *) set -- $line pct=${10%.*} pct_log="$pct_log $pct" ;; esac done } sudo_iotop() { if [ "$UID" = 0 ] then command iotop "$@" else sudo iotop "$@" fi } if [ $# -le 0 ] then exit fi pids=$* sudo_iotop -qq -b $(printf '\55\55pid=%s\n' "$@") | iotop_reader