====== Prozesse ======
* Urspruenglicher Autor: Dirk Deimeke
* Urspruengliches Datum: 09.09.2011
Es ist enorm hilfreich, selbst haeufig genutzte Kommandos gut zu kennen, wie beispielsweise das ''ps''-Kommando. Wenn man alle Prozesse sehen moechte, die gerade Dateien auf einen bestimmten Mountpunkt benutzen, hilft das Kommando ''fuser''.
$ fuser -c /srv/fritz
/srv/fritz: 13087c 13561c
Das obige Kommando listet alle Prozesse, die ''/srv/fritz'' benutzen. Um mehr ueber die Prozesse herauszufinden, bitte nicht ''ps -ef | egrep "13087|13561"'' benutzen, stattdessen lieber einen Blick auf die Option ''-p'' werfen.
$ ps -fp 13087 13561
UID PID PPID C STIME TTY STAT TIME CMD
dirk 13087 7786 0 14:30 pts/1 Ss+ 0:00 -bash
root 13561 13559 0 14:52 pts/2 S+ 0:00 -bash
Wenn man jetzt noch weiss, dass ''fuser'' alle Prozess-IDs nach ''STDOUT'' und den ganzen restlichen Text nach ''STDERR'' schreibt, kann man beides auch in einem Befehl zusammenfassen.
$ fuser -c /srv/fritz/ | xargs ps -fp
/srv/fritz/: cc
UID PID PPID C STIME TTY STAT TIME CMD
dirk 13087 7786 0 14:30 pts/1 Ss+ 0:00 -bash
root 13561 13559 0 14:52 pts/2 S+ 0:00 -bash
Moechte man nun mehr ueber die beiden Prozesse herausfinden, lohnt sich ein Blick auf ''pstree'' (die Ausgabe von ''ps -ejH'' sagt mir nicht so ganz zu).
$ pstree -alpu | less
init,1
...
|-gdm,6755
| |-gdm-simple-slav,6757 --display-id /org/gnome/DisplayManager/Display1
| | |-X,6765 :0 -br -verbose -auth /var/run/gdm/auth-for-gdm-dovMHi/database -nolisten tcp vt7
| | |-gdm-session-wor,7442
| | | |-gnome-session,7621,dirk
...
| | | | |-gnome-shell,7694
...
| | | | | |-gnome-terminal,7786
| | | | | | |-bash,7792
| | | | | | | `-sudo,13613,root -i
| | | | | | | `-bash,13614
| | | | | | | |-less,13733
| | | | | | | `-pstree,13732 -alpu
| | | | | | |-bash,13087
| | | | | | |-bash,13514
| | | | | | | `-sudo,13559,root -i
| | | | | | | `-bash,13561
...
Damit laesst sich rueckverfolgen, dass die root-Shell, die den Mountpunkt benutzt, urspruenglich dem User dirk gehoert.
Anderes Anwendungsgebiet: Herausfinden der Anzahl der Prozesse, die der User des Apache-Servers gerade geoeffnet hat und beenden der Prozesse mit ''kill -15''.
ps -ef | grep -c ^www-data
# oder
ps -ef | grep ^www-data | wc -l
# oder
ps -fu www-data | wc -l
Der letzte Befehl ist der beste, da er nicht alle (zigtausend) Prozesse auf einem System durchsucht, sondern nur die, die dem User www-data gehoeren. Allerdings enthält er noch den Spaltenkopf. Dazu spaeter.
Wir hatten ja die Aufgabe an alle Prozesse ein ''kill -15'' zu senden.
ps -fu www-data | awk '! /UID/ {print $2}' | xargs kill -15
# sehr gewoehnungsbeduerftig
ps -u www-data -o pid= | xargs kill -15
Das ''-o pid='' gibt nur die Spalte PID aus und unterdrueckt den Spaltenkopf.
ps -fu www-data -o pid= | wc -l
Liefert entsprechend auch die richtige Anzahl der Prozesse.
Man kann auch mehrere Spalten kombinieren.
ps -u www-data -o pid= -o cmd=
Gibt nur PID und Kommando aus.
Um eine Idee vom Speicherverbrauch zu bekommen, kann man sich auch nur die Resident Set Size und Virtual Set Size ausgeben lassen.
ps -u www-data -o rsz -o vsz
Und gleich zusammenzaehlen ...
ps -u www-data -o rsz -o vsz | awk '{rsz+=$1 ; vsz+=$2} END {print rsz/1024,vsz/1024}'
Zu awk machen wir bestimmt auch einmal etwas.
[[adminstoriesartikel|Zurück zur Uebersicht]]