Ein weiterer Blick hinter die Kulissen

Prozessverwaltung unter Linux: Baukastenprinzip

Oliver Hamel

Aufbauend auf dem Artikel Prozessverwaltung: Überblick im Prozess-Dschungel, in dem Ihnen die Grundlagen des proc-Dateisystems und nützliche Programme näher gebracht wurden, sollen Ihnen an nun weitere Programme vorgestellt werden, die den produktiven Umgang mit dem Betriebssystem – im speziellen mit dem proc-Dateisystem – vermitteln und dem Systemadministrator die tägliche Arbeit erleichtern, vor. Die Vorteile von htop gegenüber top, das Programmpaket psmisc, welches die Programme fuser, pstree und killall enthält und das Programm procinfo, welches Informationen aus dem proc-Dateisystem sinnvoll formatiert ausgibt, sind die thematischen Schwerpunkte.

Htop

Als Systemadministrator ist Ihnen die tägliche Arbeit mit top (aus dem Programmpaket procps), dem Tool zum Anzeigen von Systemressourcen, sicher geläufig. Htop, der interaktive Prozessviewer, bietet die Funktionalität von top und geht darüber hinaus. Das auf ncurses basierende Userinterface bietet in punkto Darstellung und Bedienung zahlreiche Vorteile. Zu den Features zählen zum Beispiel vertikales und horizontales Scrollen der Liste, um alle Prozesse und die kompletten Programmaufrufe zu sehen. Das Ändern von Prioritäten wie auch das Stoppen und Beenden von Prozessen wird durch die Auswahl der Zeile und der Auswahl des entsprechenden Menüpunkt eingeleitet. Bedienung mit der Maus, Anpassungen der Sortierfunktion, Ausblenden von Kernel-Prozessen oder Prozessen anderer User sind weitere Vorzüge von htop. Für eine vollständige Übersicht konsultieren Sie bitte die Manualpage htop.

Da Bilder bekanntlich mehr als Worte sagen, sehen Sie in Abbildung 1 und 2 die Gegenüberstellung von top und htop. Der Übersicht halber ist dem Benutzer oh nur der Blick auf Prozesse, die unter seiner Benutzerkennung laufen, gewährt.

Abb. 1: top

Abb. 2: htop
Psmisc

Das Programmpaket Psmisc enthält drei weitere Programme zur Arbeit mit Informationen, die unterhalb des /proc-Verzeichnisses aufgeführt sind. Fuser dient ähnlich lsof der Identifikation von geöffneten Dateien, pstree stellt laufende Prozesse in einer hierarchischen Baumansicht (Eltern, Kinder) dar und killall sendet Signale an alle Prozesse, die dem übergebenen Namen entsprechen.

Kennen Sie das Phänomen das sich ein gemountetes Dateisystem, zum Beispiel eine CD-ROM, nicht unmounten lässt, weil ein Prozess noch darauf zugreift? Listing 1 stellt die Problematik und die Lösung über fuser dar. Das Verzeichnis lässt sich nicht unmounten, mount meldet umount: /mnt: device is busy. fuser -u /mnt listet die auf diesem Mountpoint aktiven Prozesse und zeigt zusätzlich den Usernamen an. Über den Aufruf von ps mit den von fuser überlieferten PIDs erkennen wir, dass auf dem Mountpoint /mnt eine Shell und der Editor vi aktiv sind. Der Aufruf fuser -k /mnt/ sendet das Signal SIGKILL an die Prozesse, die auf das Verzeichnis zugreifen. Im Anschluss kann /mnt sauber unmountet werden.

Listing 1
-----------------------------------------------------------
# umount /mnt/
umount: /mnt: device is busy
# fuser -u /mnt/
/mnt/:               28364c(root)  4916c(root)
# ps 28364 4916
  PID TTY      STAT   TIME COMMAND
28364 pts/7    Ss     0:00 -/bin/bash
 4916 pts/7    S+     0:00 vi /mnt/example
# fuser -k /mnt/
/mnt/:               28364c  4916c
# umount /mnt/

Ein weiteres praktisches Beispiel für fuser (Listing 2) führt alle Prozesse auf, welche unterhalb des Verzeichnisses /var aktiv sind. Die Felder User, PID und COMMAND gleichen der Ausgabe von ps, ACCESS listet, wie der Prozess auf das File zugreift. Die Art des Zugriffs kann r (root directory), c (current directory), F (open file), m (memory mapped file) oder e für (running executable) sein.

Listing 2
----------------------------------------------------------------
# fuser -uvm /var

                     USER        PID ACCESS COMMAND
/var:                root      16362 F.... (root)metalog
                     root      13515 F.... (root)apache2
                     ntp        3946 .rc.. (ntp)ntpd
                     apache    21305 F.... (apache)apache2
                     root      19978 F.c.. (root)master
                     root       1351 F.c.. (root)cron
                     root      19511 F.... (root)screen
                     apache     9381 F.... (apache)apache2
                     apache    22212 F.... (apache)apache2
                     postfix   15640 F.c.. (postfix)pickup
                     postfix   11756 F.c.. (postfix)qmgr

Listing 3 führt Prozesse auf, die das https-Protokoll über den Port 443 benutzen.

Listing 3
--------------------------------------------------------------------------
# fuser -uv -n tcp https

                     USER        PID ACCESS COMMAND
https/tcp:           root      13515 F.... (root)apache2
                     apache    21305 F.... (apache)apache2
                     apache    24659 F.... (apache)apache2
                     apache    12004 F.... (apache)apache2
                     apache    31944 F.... (apache)apache2

Ein Prozess, der einen weiteren Prozess startet, agiert unter Linux als Elternprozess. Der von ihm gestartete Prozess ist der Kindprozess. Wird ein Elternprozess beendet, sorgt das Betriebssystem dafür, dass alle dazugehörigen Kindprozesse beendet werden. Das Programm pstree listet alle Prozesse entsprechend dieser Hierarchie. In Listing 4 ist in der letzten Zeile sehr gut zu erkennen, wie das Kommando pstree gestartet wurde. Es erfolgte ein Login auf den Server über ssh, daraufhin wurde die bash-Shell gestartet. Nach dem Wechsel auf den Benutzer root durch das Kommando su erfolgte der Start von pstree. Der einfache Aufruf von pstree stellt eine kompakte Sicht dar. Über den Aufruf von pstree -a werden alle Kommandos mit Ihren Parametern gelistet und die kompakte Ansicht deaktiviert.

Killall sendet Signale an Prozesse. Im Unterschied zu kill, welches die Übergabe der PID erwartet, identifiziert killall die Prozesse anhand des Namens. Der Befehl killall -1 sshdsendet zum Beispiel das Signal SIGHUP an alle sshd-Prozesse und lässt damit die Konfiguration neu einlesen. Um mit einem Kommando alle xterm-Fenster zu schließen, geben Sie einfach killall exterm in einer Kommandozeile ein.

Listing 4
-------------------------------------------------------
# pstree
init-+-6*[agetty]
     |-7*[create_statisti]
     |-cron
     |-events/0
     |-events/1
     |-khelper
     |-4*[kjournald]
     |-ksoftirqd/0
     |-ksoftirqd/1
     |-kswapd0
     |-kthread-+-aio/0
     |         |-aio/1
     |         |-kacpid
     |         |-kblockd/0
     |         |-kblockd/1
     |         |-kseriod
     |         |-2*[pdflush]
     |         `-scsi_eh_0
     |-metalog---metalog
     |-migration/0
     |-migration/1
     |-2*[ntpd]
     `-sshd---sshd---sshd---bash---su---bash---pstree
Procinfo

Procinfo ist ein Programm, mit dem Sie nützliche Informationen aus dem virtuellen proc-Dateisystem und damit aus dem laufenden Linux-Kernel benutzerfreundlich aufbereitet ausgeben können. Procinfo kennt verschiedene Parameter, um Informationen über Arbeitsspeicher, Blockdevices, IRQ und DMA, Module und Devices auszugeben. Die Standardausgabe wird in Listing 5 dargestellt. Über den Parameter -a werden alle Informationen ausgegeben, -n und eine numerische Angabe lässt die Informationen alle N Sekunden aktualisieren, über die Taste q verlassen Sie procinfo.

Listing 5
--------------------------------------------------------------------
# procinfo
Linux 2.6.17 (root@localhost) (gcc 3.4.4 ) #1 SMP Sun Jun 18 13:19:06 CET 2006 2CPU

Memory:      Total        Used        Free      Shared     Buffers
Mem:       1027440      911476      115964           0       18392
Swap:       995988      176804      819184

Bootup: Wed May 17 11:20:46 2006    Load average: 0.02 0.16 0.72 1/122 24864

user  :   9d 17:00:59.80  15.0%  page in :3223658033  disk 1: 39443988r26581049w
nice  :       0:00:48.15   0.0%  page out:392880281
system:      12:18:51.61   0.8%  page act: 37492868
IOwait:   3d 16:02:50.28   5.7%  page dea: 37163104
hw irq:       0:03:54.05   0.0%  page flt:4601946621
sw irq:       0:36:26.75   0.0%  swap in :   158684
idle  :  50d 13:24:03.37  78.4%  swap out:   160879
uptime:  32d  5:51:00.98         context :863175052

irq  0: 696285042 timer                 irq 10:         0 i2c-pca-isa
irq  1:       242 i8042                 irq 12:         2
irq  6:         3                       irq169:  40550163 eth0
irq  8:         0 rtc                   irq177:  72723464 gdth
irq  9:         0 acpi
Abschließend

Linux ist förmlich nach einem Baukastenprinzip zu betrachten. Viele kleine Werkzeuge fügen sich nahtlos ineinander und ermöglichen somit eine produktive Vorgehensweise, um alltägliche Aufgaben zu bewältigen. Das Verständnis zum Umgang mit Prozessen soll Ihnen dabei zur Hand gehen. Abschließend möchte ich Sie auf die Home- und Manualpages der vorgestellten Programme hinweisen, da diese noch zahlreiche Optionen, Tipps und Tricks vorhalten.

Oliver Hamel, 1977 in Berlin geboren, arbeitet als selbstständiger IT-Consultant und Systemadministrator mit Schwerpunkt Linux. Er verfügt über langjährige Erfahrungen im Umgang mit Linux-Systemen und ist nach LPIC-2 zertifiziert.
Geschrieben von
Oliver Hamel
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.