Unter dieser Rubrik (LTW) wird auf diesem Blog jede Woche ein Linux Hilfsprogramm vorgestellt. Ausgewählt wird jeweils eines der zahlreichen kleinen Werkzeuge und Tools, die nicht viel Aufmerksamkeit auf sich ziehen, die aber das tägliche Arbeiten am PC auf vielfältige Weise erleichtern. Ich verwende jeweils die Linux-Variante des vorgestellten Tools; oft laufen die Programme aber auf den verschiedensten Plattformen.
Die Idee ist uralt: Informationen werden durch eine hierarchische Anordnung zueinander in Beziehung gebracht. Der Vater der Kategorienlehre, Aristoteles, baute erstmals Systeme auf, in denen er das gesammelte Wissen logisch anordnete und kategorisierte. Die Werke des grossen griechischen Denkers waren noch im Mittelalter das Mass aller Dinge. Auch heute noch ist die Lektüre des Stagiriten lehrreich und anregend: Olof Gigon, der Aristoteles Werke in unsere übersetzte, nennt den Umgang mit Aristoteles in einem sehr bedeutenden Sinne heilsam.
Aber was hat das mit unserem Linux Tool der Woche zu tun? Nun, auch in der Informatik geht gar nichts mehr ohne Ordnung und gerade das Konzept der hierarchischen Gliederung von Daten ist zu einem eminent wichtigen Hilfsmittel geworden – nicht nur beim Verwalten grosser Dateisysteme oder Verzeichnisdienste. Jedes Element einer Datensammlung gehört in einen bestimmten Ordner (resp. hat ein übergeordnetes Element) und agiert selbst als Container für weitere Objekte (resp. hat untergeordnete Elemente). Durch dieses Prinzip der gegenseitigen Beziehung können auch grosse Datenbestände strukturiert angeordnet werden und jedes Objekt lässt sich durch die Angabe eines Pfades rasch wieder auffinden.
Und was liegt nun näher, als diese Hierarchie grafisch darzustellen? Auch diese Idee ist durchaus nicht neu, denn bereits auf den ersten grafikfähigen Rechnern wurde sie genutzt und auch für das spartanische MS DOS gab es Hilfsprogramme, welche die Verzeichnishierarchie der Festplatte mit einer vertikalen Baumstruktur anzeigten. Ein Grund für die Popularität des Norton Commander war unter anderem die ausgeklügelte Directory-Tree Steuerung. Diese lebt heute weiter in zahlreichen Dateimanagern, wie Nautilus, Thunar oder Midnight Commander.
Beim Betriebssystem Linux sind auch die laufenden Programme resp. Prozesse hierarchisch geordnet. Jeder einmal gestartete Prozess, wie etwa apache kann selbst weitere, sogenannte Child-Prozesse erzeugen. Das ist an sich noch nichts besonders und viele Linux-Anwender kennen das Konzept der Prozess-Hierarchie gar nicht. Sie werden erst darauf aufmerksam. wenn sie in einem Terminal xcalc starten, das Terminal schliessen und sich dann wundern, weil auch xcalc verschwindet (einfach deshalb, weil xcalc ein Child-Prozess von xterm ist und automatisch beendet wird, wenn der Parent-Prozess endet).
Sobald auf einem System viele Prozesse am Laufen sind, wird es allerdings unübersichtlich, das Kommando ps ax liefert dann eine lange Liste der aktiven Prozesse. Wie die einzelnen Prozesse zueinander in Beziehung stehen, geht aus dieser Liste jedoch nicht hervor. Eine weit übersichtlichere Darstellung liefert nun das Tool pstree, das mit einer simplen ASCII-Grafik die Hierarchie der Prozesse anzeigt:
...
??perl???perl
??portmap
??rpc.idmapd
??rpc.statd
??safe_asterisk???asterisk???4*[rawplayer???cat]
??scsi_eh_0
??sshd???sshd???bash???pstree
? ??sshd???bash
??syslogd
...
Die Ausgabe liefert in diesem Beispiel einige interessante Details: es gibt ein Perl-Pogramm, das selbst einen weiteren Prozess erzeugt hat. Auf dem System läuft ferner ein Asterisk-Server, der vier rawplayer-Prozesse am Laufen hat. Schliesslich ist das pstree-Kommando selbst zu sehen; es ist ein Child-Prozess der Shell (bash) und des SSH-Servers (sshd). Nun wäre es spannend zu wissen, welcher Script genau von Perl abgearbeitet wird. Das wird mit dem Argument -a möglich, dieses zeigt zu jedem Prozess die Argumente an:
...
??perl panel-server.pl -v
? ??perl panel-server.pl -v
...
Damit wird pstree zu einem exzellenten Hilfsprogramm, wenn es darum geht, Prozesse und ihre Abhängigkeit zu analysieren. Hilfreich sind bei der Analyse auch die Argumente -h und -H pid. Damit lässt sich feststellen, zu welchem Prozess genau eine Prozess-ID (pid) gehört. Wie alle guten UNIX-Tools hat auch pstree eine Manpage und eine kurze Hilfestellung, die mit pstree –help angezeigt werden kann.