#!/bin/bash # # Return the consolidated user´s memory usage (in megabytes). # The user could be passed as the first argument, otherwise the $USER # variable should be used. # function check_if_is_valid_user() { if `id $1 >/dev/null 2>&1`; then return 0 else return 1 fi } function print_usage() { echo "Usage: $0 [--help|-h|--all|-a|some_valid_user]" exit 1 } function get_user_memory_usage() { proc_mem=`ps -u $1 -o rss --no-heading` mem_usage=0 for i in $proc_mem; do mem_usage=`echo $((mem_usage+$i))` done echo $((mem_usage / 1024)) } function get_active_thinlinc_users() { # Temporary solution... ps ax -o user --no-heading |sort -u | grep ^tw } # Dont touch that! ALL_USERS_REPORT="No" if [ $# -eq 1 ]; then case $1 in --all|-a) ALL_USERS_REPORT="Yes" ;; --help|-h) print_usage ;; *) if `check_if_is_valid_user $1`; then # Okay. You must be root to query another user... if [ $UID -eq 0 ]; then query_user=$1 else echo "Hey, smart one! You must be root to query another user!" exit 1 fi else echo "Ops... \"$1\" doesn´t seem to be a valid user. Exiting." exit 1 fi ;; esac elif [ $# -eq 0 ]; then query_user=$USER else print_usage fi if [ $ALL_USERS_REPORT == "Yes" ]; then tl_active_users=`get_active_thinlinc_users` count=`echo $tl_active_users |wc -w` echo -e "\nThere are currently $count ThinLinc active users." echo -e "*============================================*\n" # Lets start by 0, ok? all_users_mem_usage=0 for tl_user in $tl_active_users; do echo -en " $tl_user\t: " user_mem_usage=`get_user_memory_usage $tl_user` all_users_mem_usage=`expr $all_users_mem_usage + $user_mem_usage` echo "${user_mem_usage} MB" done echo -e "\n*============================================*" echo "Total user memory usage: ${all_users_mem_usage} MB" else get_user_memory_usage $query_user fi