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.

Zurück zur Uebersicht