#!/bin/bash ## # Gouverneur Thomas - 2010 ## function usage { echo -e "$0 [-hmctr]" echo -e "\t-h\tThis help message"; echo -e "\t-m\tSort by memory usage"; echo -e "\t-c\tSort by instant CPU usage"; echo -e "\t-t\tSort by total CPU used"; echo -e "\t-n\tSort by number of process"; echo -e "\t-r [refreshtime]"; exit 42; } function mtop { while(:); do clear; echo -e "USER\tNRPS\t%CPU\t\tRSS\t\tTIME"; ps -o pid,uname,bsdtime,rss,pcpu -A --no-headers|awk '\ { \ pid=$1; \ user=$2; \ time=$3; \ rss=$4; \ pcpu=$5; \ mcpu[user]+=pcpu; \ nrps[user]+=1; \ mrss[user]+=rss; \ split(time,tt,":"); \ t=tt[1]*60; \ t+=tt[2]; \ mtime[user]+=t; \ } \ END { \ for (k in nrps) { \ printf "%s\t%4d\t%4d\t%11d\t%12d\n", k,nrps[k],mcpu[k],mrss[k],mtime[k]; \ } \ }' | sort -n -r -k ${sk} sleep ${rt}; done; } sk=3 rt=1 args=`getopt hmnctr: "$@"` if [ $? -ne 0 ]; then usage; fi set -- $args for i do case "$i" in -h) shift; usage ;; -n) shift; sk=2;; -m) shift; sk=4;; -c) shift; sk=3;; -t) shift; sk=4;; -r) shift; rt=$1; shift;; esac done mtop