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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#!/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:
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.
Article Number: 51
Posted: Thu, May 24, 2018 9:33 PM
Last Updated: Thu, May 24, 2018 9:33 PM
Online URL: http://kb.ictbanking.net/article.php?id=51