Listing 5

. shlib

GetProcs()
{
    while read F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
    do
       if [ "$CMD" ]
       then
            arrset pid2cmd $PID $CMD
            arrset pid2own $PID $UID
       fi
    done
}

User=`whoami`

KillProcs()
{
    arrnames Procs pid2cmd
    for Proc in $Procs
    do
        arrget Cmd pid2cmd $Proc
        arrget Owner pid2own $Proc
        if Matches "$Cmd" "$1"
        then
            if [ "$User" = "root" ]  || [ "$User" = "$Owner" ]
            then
                kill -9 $Proc
            else
                echo "Process <$Cmd> ($Proc) owned by $Owner, can't kill"
            fi
        fi
    done
}

ps -edalf > /tmp/sc1.$$
GetProcs < /tmp/sc1.$$
for p
do
  KillProcs "$p"
done


