Pensavo ad una soluzione del genere...(qualora a qualcuno servisse ).
L'ho creata di getto, appena sono a casa controllo che non ci siano errori. Come logica secondo me ci sono.

Consigli?

if [ $1 = "" ] then;
echo "Specificare username";
exit 1;
fi
if [ $2 = "" ] then;
echo "Specificare processi da lasciare attivi.";
exit 1;
fi

ps eaxo bsdstart,cmd,pid | grep "$1" | grep "postgres" | awk '{ print $4}' > kill_processo.tmp

cp kill_processo.tmp _kill_processo.tmp

NUMERO_RIGHE=`wc -l _kill_processo.tmp | awk '{ print $1 }'`

NUMERO_RIGHE=`expr $NUMERO_RIGHE + -$2`

X=1
while [ $X -le $NUMERO_RIGHE ]
do
PID=`head -n 1 _kill_processo.tmp`

kill $PID

NUMERO_RIGHE_TMP=`wc -l _kill_processo.tmp | awk '{ print $1 }'`

RIGHE_ERASE=`expr $NUMERO_RIGHE_TMP + -1`

tail -n $RIGHE_ERASE _kill_processo.tmp > _kill_processo.tmp2
cp _kill_processo.tmp2 _kill_processo.tmp

X=`expr $X + 1`
done

rm -f _kill_processo.tmp
rm -f _kill_processo.tmp2