Zabijanie wszystkich procesów użytkownika
Napisał: Patryk Krawaczyński
17/05/2007 w Hacks & Scripts Brak komentarzy. (artykuł nr 18, ilość słów: 236)
Z
ałóżmy, że z jakiegoś typowego powodu (zabieranie zbyt dużej ilości zasobów systemowych lub przepustowości łącza) chcemy zabić wszystkie procesy użytkownika. Oczywiście znamy komendę: skill -9 -u użytkownik, ale załóżmy, że użytkownik ten ustawił węzeł z podłączonym agentem, który za każdym zabitym procesem uruchamia nowy, po zabiciu agenta proces uruchamia kolejnego agenta…
W tej sytuacji przydałby się skrypt, który w pętli będzie tak długo zabijał procesy użytkownika aż wszystkie zostaną finalnie zakończone. Skrypt taki stworzył David Brock:
#!/bin/bash
USER=$1
MYNAME=`basename $0`
if [ ! -n "$USER" ]
then
echo "Użycie: $MYNAME użytkownik" >&2
exit 1
elif ! grep "^$USER:" /etc/passwd >/dev/null
then
echo "Użytkownik $USER nie istnieje!" >&2
exit 2
fi
while [ `ps -ef | grep "^$USER" | wc -l` -gt 0 ]
do
PIDS=`ps -ef | grep "^$USER" | awk '{print $2}'`
echo "Zabijam " `echo $PIDS | wc -w` " procesów użytkownika $USER."
for PID in $PIDS
do
kill -9 $PID 2>&1 >/dev/null
done
done
echo "Użytkownik $USER nie posiada już żadnych uruchomionych procesów."
Oto wynik działania skryptu, który musiał przetworzyć podwójnie pętle, aby unicestwić wszystkie procesy użytkownika agresor:
Zabijam 7 procesów użytkownika agresor
Zabijam 2 procesów użytkownika agresor
Użytkownik agresor nie posiada już żadnych uruchomionych procesów.
Pętla takiego skryptu potrafi wykonać się szybciej, niż podniesienie kolejnego procesu czy agenta, w ten sposób zabicie wszystkich procesów będzie tylko kwestią czasu.
Więcej informacji: www.bashcurescancer.com

