#!/bin/bash
# Skrypt renicename zmieniający priorytet procesu o podanej nazwie.

user=""; tty=""; showpid=0; niceval="+1"        # Inicjalizacja.

while getopts "n:u:t:p" opt; do
  case $opt in
   n ) niceval="$OPTARG";               ;;
   u ) if [ ! -z "$tty" ] ; then
         echo "$0: Błąd: argumenty -u i -t wykluczają się wzajemnie." >&2
         exit 1
       fi
       user=$OPTARG                     ;;
   t ) if [ ! -z "$user" ] ; then
         echo "$0: Błąd: argumenty -u i -t wykluczają się wzajemnie." >&2
         exit 1
       fi
       tty=$OPTARG                      ;;
   p ) showpid=1;                       ;;
   ? ) echo "Użycie: $0 [-n priorytet] [-u użytkownik|-t terminal] [-p] nazwa" >&2
       echo "Domyślnie argument priorytet ma wartość \"$niceval\" (znak dodawania " >&2 
       echo "oznacza niski priorytet, a odejmowania wysoki, ale tylko użytkownik " >&2 
       echo "root może nadać wartość mniejszą od 0)." >&2
  esac
done
shift $(($OPTIND - 1))  # Przesunięcie przeanalizowanych argumentów.

if [ $# -eq 0 ] ; then
  echo "Użycie: $0 [-n priorytet] [-u użytkownik|-t terminal] [-p] nazwa" >&2
  exit 1
fi

if [ ! -z "$tty" ] ; then
  pid=$(ps cu -t $tty | awk "/ $1/ { print \\$2 }")
elif [ ! -z "$user" ] ; then
  pid=$(ps cu -U $user | awk "/ $1/ { print \\$2 }")
else
  pid=$(ps cu -U ${USER:-LOGNAME} | awk "/ $1/ { print \$2 }")
fi

if [ -z "$pid" ] ; then
  echo "$0: brak procesu o nazwie $1." >&2 ; exit 1
elif [ ! -z "$(echo $pid | grep ' ')" ] ; then
  echo "$0: więcej niż jeden proces ma nazwę ${1}:" 
  if [ ! -z "$tty" ] ; then
    runme="ps cu -t $tty"
  elif [ ! -z "$user" ] ; then
    runme="ps cu -U $user"
  else
    runme="ps cu -U ${USER:-LOGNAME}"
  fi
  eval $runme | \
      awk "/ $1/ { printf \"  user %-8.8s  pid %-6.6s  job %s\n\", \
      \$1,\$2,\$11 }"
  echo -n "Użyj argumentów -u użytkownik lub -t terminal, "
  echo "aby uściślić kryteria wyboru procesu."
elif [ $showpid -eq 1 ] ; then
  echo $pid
else
  # Gotowe, można działać!
  /bin/echo -n "Zmiana priorytetu procesu \""
  /bin/echo -n $(ps cp $pid | sed 's/ [ ]*/ /g' | tail -1 |  cut -d\  -f6-)
  echo "\" ($pid)"
  renice $niceval $pid
fi

exit 0
