Der Befehl lsof – verständlich erklärt für Mac-Nutzer

Beherrschen Sie den Befehl lsof, um herauszufinden, welche Prozesse auf Ihrem Mac Dateien geöffnet haben. Ein Leitfaden für Entwickler und Power-User.

Ihr externes Laufwerk lässt sich nicht auswerfen. macOS zeigt Ihnen die ärgerlich vage Meldung an, dass „ein oder mehrere Programme es möglicherweise verwenden“. Welche Programme? Das verrät es nicht. Genau hier kommt lsof ins Spiel.

Der Name steht für „list open files“ (offene Dateien auflisten), und genau das tut der Befehl. Auf Unix-basierten Systemen wie macOS wird nahezu alles als Datei behandelt – auch Netzwerkverbindungen, Geräte und Festplatten-Volumes. Wenn sich ein Laufwerk nicht auswerfen lässt, sagt Ihnen lsof ganz genau, welcher Prozess es in Geiselhaft hält.

Grundlegende Syntax

Die einfachste Art, lsof bei Auswurfproblemen zu nutzen, ist:

lsof /Volumes/YourDriveName

Ersetzen Sie „YourDriveName“ durch den tatsächlichen Namen Ihres Laufwerks. Enthält der Name Leerzeichen, setzen Sie den gesamten Pfad in Anführungszeichen:

lsof "/Volumes/My Backup Drive"

Dies liefert eine Liste jedes Prozesses, der ein offenes Datei-Handle auf diesem Volume hat. Jede Zeile zeigt den Prozessnamen, seine ID (PID), den Benutzer, der ihn ausführt, sowie Informationen über die konkret aufgerufene Datei.

Die Ausgabe lesen

Eine typische lsof-Ausgabe sieht ungefähr so aus:

COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mds_store  1234   root   4r   REG   1,12   524288  ...  /Volumes/External/.Spotlight-V100/...
Finder     5678   you    3r   DIR   1,12     1024  ...  /Volumes/External

Die wichtigsten Spalten sind COMMAND (der Prozessname), PID (die Prozess-ID, mit der Sie ihn beenden würden) und NAME (der tatsächlich aufgerufene Dateipfad).

Die Spalte FD zeigt, wie die Datei verwendet wird. Eine Zahl gefolgt von „r“ steht für Lesezugriff, „w“ für Schreibzugriff und „u“ für beides – Lesen und Schreiben. Steht dort „cwd“, hat der Prozess diesen Ort als sein aktuelles Arbeitsverzeichnis. Das passiert, wenn Sie ein Terminal-Fenster in einem Ordner auf dem Laufwerk geöffnet haben.

Herausfinden, was Ihr Laufwerk blockiert

Speziell bei Auswurfproblemen müssen Sie meist nur wissen, welche Prozessnamen auftauchen. Häufige Übeltäter sind mds und mds_stores (Spotlight-Indizierung), Finder, QuickLookUIService (Erzeugung von Miniaturansichten) und fsevents (Dateisystem-Überwachung).

Wenn die Ausgabe sehr umfangreich ist und Sie sie eingrenzen möchten, können Sie grep verwenden:

lsof /Volumes/YourDriveName | grep -v "^COMMAND"

Damit wird die Kopfzeile entfernt, sodass Sie nur die tatsächlichen Prozesse sehen. Wenn Sie nur die eindeutigen Prozessnamen möchten:

lsof /Volumes/YourDriveName | awk '{print $1}' | sort -u

Nützliche Optionen

Die Option -c filtert nach dem Befehlsnamen. Wenn Sie Spotlight als Ursache vermuten:

lsof -c mds /Volumes/YourDriveName

Dies zeigt nur Prozesse an, deren Namen mit „mds“ beginnen.

Die Option +D listet rekursiv alle offenen Dateien in einem Verzeichnis auf:

lsof +D /Volumes/YourDriveName

Dies ist gründlicher als die Grundsyntax, kann aber auf großen Laufwerken mit vielen Dateien langsam sein.

Um zu sehen, welche Prozesse ein bestimmter Benutzer auf dem Laufwerk geöffnet hat:

lsof -u yourusername /Volumes/YourDriveName

lsof ohne sudo verwenden

Standardmäßig zeigt lsof nur Prozesse Ihres eigenen Benutzerkontos an. Systemprozesse, die unter root laufen (wie Spotlights mds), erscheinen erst, wenn Sie lsof mit sudo ausführen:

sudo lsof /Volumes/YourDriveName

Sie müssen Ihr Passwort eingeben. Zur Behebung von Auswurfproblemen ist sudo fast immer nötig, da Systemprozesse häufig die Blockierer sind.

Den blockierenden Prozess beenden

Sobald Sie die Prozess-ID (PID) aus der lsof-Ausgabe kennen, können Sie ihn beenden:

kill 1234

Ersetzen Sie 1234 durch die tatsächliche PID. Falls das nicht funktioniert, können Sie es erzwingen:

kill -9 1234

Seien Sie damit vorsichtig. Das Beenden von Systemprozessen wie mds kann vorübergehend Probleme verursachen. Der Prozess startet in der Regel automatisch neu, aber Spotlight verhält sich vielleicht für eine Minute eigenartig. Das Beenden von Programmen wie dem Finder ist meist unbedenklich; macOS startet den Finder automatisch neu.

Bei Programmen, die Ihnen gehören (etwa ein Terminal-Fenster mit einer Shell, die im Verzeichnis des Laufwerks steht), ist es sauberer, die Anwendung einfach normal zu schließen oder vom Laufwerk wegzunavigieren, bevor Sie den Auswurf versuchen.

Typische Szenarien

Terminal mit aktuellem Verzeichnis auf dem Laufwerk: Wenn Sie mit cd in einen Ordner auf Ihrem externen Laufwerk gewechselt haben, hält dieser Shell-Prozess das Laufwerk offen. Wechseln Sie entweder woanders hin (cd ~) oder schließen Sie das Terminal-Fenster.

Finder-Fenster: Wenn der Finder ein Fenster mit dem Laufwerk geöffnet hat – oder das Laufwerk auch nur in der Seitenleiste ausgewählt ist –, kann das den Auswurf verhindern. Schließen Sie alle Finder-Fenster, die den Inhalt des Laufwerks anzeigen.

Spotlight-Indizierung: Die Prozesse mds, mds_stores und mdworker indizieren neue Laufwerke automatisch. Sie können warten, bis sie fertig sind, die Indizierung mit sudo mdutil -i off /Volumes/YourDriveName deaktivieren oder sie direkt beenden.

Hintergrund-Apps mit offenen Dateien: Manche Programme behalten Verweise auf zuletzt verwendete Dateien, selbst nachdem Sie die Dokumente geschlossen haben. Kreativ-Anwendungen wie Photoshop oder Videoschnittprogramme sind häufige Übeltäter. Das vollständige Beenden der App gibt die Dateien meist frei.

Jenseits der Befehlszeile

Wenn Sie sich im Terminal unwohl fühlen oder nicht jedes Mal die lsof-Ausgabe entschlüsseln möchten, wenn Sie ein Laufwerk abziehen wollen, gibt es grafische Alternativen.

Die Aktivitätsanzeige kann Ihnen die offenen Dateien eines bestimmten Prozesses anzeigen, aber Sie müssen bereits wissen, welchen Prozess Sie untersuchen wollen. Die Frage „Was verwendet dieses Laufwerk?“ beantwortet sie nicht ohne Weiteres.

Ejecta wurde speziell für dieses Problem entwickelt. Es zeigt Ihre angeschlossenen Laufwerke an, erkennt, welche Prozesse das jeweilige Laufwerk blockieren, und lässt Sie diese Prozesse mit einem Klick beenden. Im Grunde ist es eine grafische Hülle für die Detektivarbeit, die lsof erfordert – ergänzt um die Intelligenz, mit Systemprozessen sicher umzugehen.

Die Befehlszeile ist mächtig für alle, die sie bevorzugen, aber sie sollte für etwas so Einfaches wie das Abziehen eines Laufwerks nicht zwingend nötig sein.

Wenn Sie nicht jedes Mal das Terminal bemühen möchten: Ejecta zeigt Ihnen genau, welcher Prozess Ihr Laufwerk blockiert – und lässt Sie ihn mit einem Klick direkt aus der Menüleiste beenden.

Jetzt kaufen — $9.99