====== 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]]