#!/bin/bash
#######################################
#### Clean the remaining processes ####
#######################################
USER=$(whoami)
COUNT=$(whoami|wc -m)
PLUS="+"
if(( $COUNT > 8 )); then
        USER=$(whoami | cut -b 1-7)
        USER="$USER$PLUS"
fi
NumToKill=$(ps -fC sysprak-client --no-headers|wc -l)
FetchDetails=$(ps -fC sysprak-client --no-headers|tail -n $((X-3))|tr -s " " _)

echo -e "\nlooking for abandoned processes"
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
for A in $FetchDetails
        do
        Name=$(echo $A|awk -F _ '{print $8}')
        PID=$(echo $A|awk -F _ '{print $2}')
        Us=$(echo $A|awk -F _ '{print $1}')
        if( [ $Us == $USER ] ); then
                if [ "$Name" = "./testing.o" ]; then
                        echo -e "\t killing process ID $PID"
                        kill -9 $PID
                fi
        fi
done
echo -e "Done.\n"
################################################################
# remove all shared memory segments with no associated process #
################################################################
X=$(ipcs -m|wc -l)
IPCS=$(ipcs -m|tail -n $((X-3))|tr -s " " _)
echo -e "\nlooking for unused shared memory segments"
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
# check, if nattch is 0 and remove the shared memory segment
for A in $IPCS
  do
  NATTCH=$(echo $A|awk -F _ '{print $6}')
  ID=$(echo $A|awk -F _ '{print $2}')
  USER=$(echo $A|awk -F _ '{print $3}')


  if(($USER == $(whoami))); then
          if (($NATTCH==0)); then
                echo -e "\tremoving shm id $ID with $NATTCH associated processes from $USER user"
                ipcrm -m $ID #>&/dev/null # <- Ausgabe nach /dev/null umleiten
          fi
  fi
done
echo -e "Done.\n"
