Zabijanie wszystkich procesów użytkownika

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:

root@narf:~ # ./killem.sh 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.

0 (0)
Article Rating (No Votes)
Rate this article
Attachments
There are no attachments for this article.
Comments
There are no comments for this article. Be the first to post a comment.
Full Name
Email Address
Security Code Security Code
Related Articles RSS Feed
Using etckeeper with git
Viewed 6866 times since Sun, Jun 3, 2018
Extending Linux LVM partitions - scripts
Viewed 6531 times since Sun, May 20, 2018
HowTo: Retrieve Email from a POP3 Server using the Command Line
Viewed 10985 times since Mon, Feb 18, 2019
tcpdump usage examples
Viewed 2300 times since Fri, Jul 27, 2018
How to accurately determine when the system was booted
Viewed 2323 times since Wed, Oct 3, 2018
ZPOOL: Create a new zpool for zfs filesystems
Viewed 2229 times since Sun, Jun 3, 2018
WatchDog watchdog.sh script for checking server running
Viewed 5393 times since Tue, Jul 31, 2018
How to do a Filesystem Resize (ext3/ext4) on Redhat running on VMware
Viewed 11010 times since Wed, Jul 25, 2018
How to Install and use Lsyncd on CentOS 7 / RHEL 7 rsync
Viewed 4313 times since Wed, Oct 31, 2018
HowTo: The Ultimate Logrotate Command Tutorial with 10 Examples
Viewed 5208 times since Fri, Nov 30, 2018