Aus LinuxUser 05/2002

PIDs, Daemonen, Zombies und Jobs

Quicklebendig und totgeglaubt

Unix-Systeme sind nichts für Zartbesaitete: In der Welt der Prozesse wird gekillt und gestorben, wimmelt es von Zombies und Daemonen.

Dr. Linux

Komplizierte Organismen, wie Linux-Systeme es nun einmal sind, haben so ihre ganz eigenen Wehwehchen. Dr. Linux beobachtet die Patienten in den Linux-Newsgruppen, stellt an dieser Stelle Rezepte für aktuelle Probleme aus und alternative Heilmethoden vor.

Welches Programm hält das Laufwerk fest?

Nachdem ich eine CD mit Grafiken auf meinem Linux-Rechner angesehen hatte, hatte ich folgendes Problem: Beim Versuch, das CD-Laufwerk auszuhängen, kam die Fehlermeldung:

umount: /media/cdrom: Das Gerät wird momentan noch benutzt.

Wie bekomme ich heraus, welches Programm ein umount verhindert?

Abbildung 1: Welches Programm hält das Laufwerk fest?
Abbildung 1: Welches Programm hält das Laufwerk fest?

Dr. Linux: Ob auf einer grafischen Oberfläche die Fehlermeldung aus Abbildung 1 aufpoppt oder auf einer Kommandozeile die beschriebene Zeile bzw. die englische Version

umount: /media/cdrom: device is busy

erscheint – die Fahndung nach dem Prozess, der das Laufwerk bindet, leitet man ganz einfach mit dem Befehl lsof („list open files“; liste offene Dateien auf) ein. Dieses Kommando lässt sich so vielseitig einsetzen, dass die passende Manpage über 2000 Zeilen enthält. Es ist in der Regel unter /usr/sbin zu finden – sofern Ihr Suchpfad dieses Verzeichnis nicht enthält, müssen Sie den Befehl statt mit einem einfachen lsof als /usr/sbin/lsof aufrufen.

Als Argument übergeben Sie ihm den Namen und ggf. den Pfad der Datei, von der Sie wissen wollen, welche Prozesse auf sie zugreifen; im Fall eines blockierten CD-Laufwerks die Pfadangabe der entsprechenden Gerätedatei. Ohne Angabe eines Beobachtungsobjekts präsentiert Ihnen lsof alle offenen Dateien Ihres Systems, eine Liste also, die Kurzgeschichtenlänge erreichen kann und nur in Ausnahmefällen nützlich ist.

Wenn Ihnen Windows-Laufwerksbuchstaben noch geläufig und Sie unsicher sind, wie genau Ihr CD-Laufwerk unter Linux heißt, schlagen Sie das schnell mit dem Befehl mount nach. mount ohne weitere Angaben listet alle derzeitig eingehängten Laufwerke auf, darunter selbstverständlich auch die CD, die sich nicht unmounten lässt:

perle@maxi:~> mount
/dev/hda7 on / type ext3 (rw)
[…]
/dev/hdb on /media/cdrom type iso9660 (ro,nosuid,nodev,user=perle)

Im Beispiel hängt das CD-ROM-Laufwerk als Slave am primären IDE-Controller (/dev/hdb), die auf der CD enthaltenen Daten sind unterhalb des Verzeichnisses /media/cdrom im Linux-Dateibaum einzusehen. Am Filesystem-Typ iso9660 erkennt man, dass es sich um eine Daten-CD handelt.

Ein lsof /dev/hdb sorgt nun für eine Ausgabe wie in Listing 1. Um zu erfahren, welche Prozesse auf Daten auf der CD zugreifen, schauen wir uns insbesondere die folgenden Ausgabespalten an:

  • Die Spalte COMMAND gibt das zugreifende Kommando aus, eventuell auf neun Buchstaben verkürzt.
  • PID enthält die Prozess-Identifikationsnummer, die man beispielsweise braucht, um den entsprechenden Prozess mit dem kill-Befehl ins Nirvana zu schicken.
  • In der dritten, mit USER überschriebenen Spalte gibt lsof den Namen des Anwenders aus, der den Prozess angeschubst hat, unter Umständen lediglich dessen Benutzer-ID (UID).

Listing 1

Beispielausgaben von

lsof

perle@maxi:~> lsof /dev/hdb
COMMAND  PID  USER    FD   TYPE  DEVICE   SIZE  NODE  NAME
 gs      1252 perle    3r   REG   3,64 593581 47726 /media/cdrom/autoren.pfd

Wenn Sie unter COMMAND ein Programm finden, das Sie selbst gar nicht gestartet haben und der Sache vollständig auf den Grund gehen wollen, lohnt sich der Einsatz des Klassikers pstree. Dieses Kommando stellt Prozesse in Baumform dar, so dass Sie schnell den Überblick darüber bekommen, welche Prozesse welche anderen Prozesse gestartet haben. Mit der Option -p enthält die pstree-Ausgabe auch die jeweiligen PIDs in Klammern (Abbildung 2). Natürlich gibt es auf allen grafischen Oberflächen Programme zur Prozessverwaltung. Wenn Sie mit einem davon Freundschaft geschlossen haben, können Sie es selbstverständlich als Alternative zu pstree einsetzen, das auf allen, auch älteren, mit wenig Hauptspeicher ausgestatteten Systemen läuft.

Abbildung 2: pstree stellt Prozesse in Baumform dar
Abbildung 2: pstree stellt Prozesse in Baumform dar

Verhindern Prozesse das Aushängen der CD, die Sie unter Ihrer User-ID gestartet haben, können Sie sie mit dem Befehl kill und der jeweiligen PID als Argument abschießen. Reagiert der Prozess darauf nicht, setzen Sie ihm mit kill -9 die Pistole auf die Brust:

perle@maxi:~> kill -9 1252

Prozesse anderer User darf lediglich root abschießen; dass Sie mit root-Vollmachten ausgestattet besonders vorsichtig vorgehen sollten, ergibt sich dabei von selbst. Sobald der fragliche Prozess sein Leben ausgehaucht hat, steht einem umount der CD nichts mehr im Wege.

Läuft’s oder läuft´s nicht?

Bei der Konfiguration von Diensten, die durch Daemonen gesteuert werden (zum Beispiel cron), finde ich in der Dokumentation häufig die Aufforderung, zu überprüfen, ob der jeweilige Daemon oder das Programm läuft. Wie stelle ich das schnell und einfach fest?

LinuxUser 05/2002 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: