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.