aufmacher.jpg

Quicklebendig und totgeglaubt

PIDs, Daemonen, Zombies und Jobs

01.05.2002
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?

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

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?

Dr. Linux: In der /var-Abteilung des Linux-Verzeichnisbaums finden Sie Daten, die sich schnell ändern können, ergo variabel sind. Dazu zählt auch die Information, ob ein bestimmter Daemon läuft. Wird er gestartet, erhält er (wie jeder andere Task auch) eine Prozess-ID, die jedoch anders als bei "normalen" Prozessen in einer Datei namens "name.pid" in /var/run verzeichnet wird. Damit wird verhindert, dass einer der Daemonen doppelt gestartet wird, und beim Herunterfahren des Systems ist sofort ersichtlich, welche Dienste beendet werden müssen.

Finden Sie einen auf einen Daemon passenden Eintrag in /var/run, können Sie im Normalfall davon ausgehen, dass der entsprechende Dienst gestartet ist (Listing 2). Natürlich kann es sein, dass er zum aktuellen Zeitpunkt gar nichts tut und sich nur die Zeit bis zu seinem nächsten Termin vertreibt; das ist abhängig von seiner Aufgabe und der jeweiligen Konfiguration.

Wenn Sie die Prozess-ID benötigen, schauen Sie sich den Inhalt der Datei am besten mit cat an – die Ausgabe beschränkt sich auf nur eine Zahl, so dass der Einsatz eines Pagers wie less zuviel des Guten wäre:

perle@maxi:/var/run> cat cron.pid
599

Der aktuell laufende Cron-Daemon trägt also die PID 599.

Listing 2

Die

.pid

-Dateien in

/var/run

enthalten die PIDs gestarteter Daemonen

perle@maxi:/var/run> ls -l
insgesamt 112
-rw-r--r--    1 root     root            4 Mär  6 09:26 atd.pid
-rw-r--r--    1 root     root            4 Mär  6 09:26 cron.pid
-rw-r—–    1 root     root            4 Mär  6 09:26 gpm.pid
-rw-r--r--    1 root     root            4 Mär  6 09:26 inetd.pid
-rw-r--r--    1 root     root            4 Mär  6 09:26 klogd.pid
-rw-r--r--    1 lp       lp              4 Mär  6 09:26 lpd.printer
-rw-r--r--    1 root     root            4 Mär  6 09:26 nscd.pid
drwxr-x--T    2 root     root         4096 Mär  6 10:18 sendmail
-rw-r--r--    1 root     root           38 Mär  6 10:18 sendmail.pid
drwxr-x—    2 root     dialout      4096 Mär  6 09:26 smpppd
-rw-r--r--    1 root     root            4 Mär  6 09:26 sshd.pid
-rw-r--r--    1 root     root            4 Mär  6 09:26 syslogd.pid
-rw-rw-r--    1 root     tty          3456 Mär  6 10:29 utmp
-rw-r--r--    1 root     root            4 Mär  6 09:26 xfstt.pid
[…]

Eine weitere Möglichkeit, sich von der Lebendigkeit eines Programms zu überzeugen, steht mit dem Befehl pidof (bei SuSE im meist nicht im Benutzer-Pfad enthaltenen Verzeichnis /sbin abgelegt) zur Verfügung, einem Link auf das Programm killall5. Übergeben Sie pidof den Namen des gesuchten Programms, das in diesem Fall nicht einmal ein Daemon sein muss. Läuft es, erhalten Sie als Ausgabe seine PID; wurde es mehrfach gestartet, gibt pidof alle Prozess-Identifikationsnummern aus.

perle@maxi:~>/sbin/pidof /sbin/syslogd
337

Sollte pidof sich nach Ihrer Eingabe ausschweigen, haben Sie es mit einem Skript zu tun (oder mit etwas, das pidof für eines hält, wobei diese Einschätzung nicht stimmen muss). In diesem Fall geben Sie die Option -x mit an:

perle@maxi:~> /sbin/pidof -x kdeinit
1125 929 927 923 921 919 909 895 893 89

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Dr. Linux
    Was sich hinter einem Befehl versteckt oder wer gerade eingeloggt ist; das alles lässt sich mit wenigen Eingaben auf der Tastatur herausfinden.
  • Dr. Linux
    Komplizierte Organismen, wie Linux-Systeme es nun einmal sind, haben so ihre ganz eigenen Wehwehchen. Dr. Linux begutachtet diesmal den Patienten Netscape, stellt Rezepte für aktuelle Probleme mit dem wohl meistgenutzten Web-Browser unter Linux aus und alternative Heilmethoden vor.
  • Dr. Linux
    Auch wenn oft schlicht von "einstampfen", "in die Tonne treten" oder "kopieren nach /dev/null" gesprochen wird, steckt hinter dem Löschen von Daten durchaus mehr als nur ein Mausklick.
  • Dr. Linux
    Mit dem Erscheinen neuer Linux-Distributionen häuft sich in den Newsgroups die Frage: "Was bedeutet eigentlich char-major-[1…255]?" Die Antwort auf diese und andere Fragen gibt der folgende Artikel.
  • Dr. Linux
    Mit einigen Tricks zum Boot-Manager LILO lässt sich auch im Winter frei nach Terry Jacks singen: "We have joy, we have fun, we'll boot linux in the sun…"
Kommentare

Infos zur Publikation

title_2014_10

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...