Sehen Sie, welcher Prozess eine Datei in Mac OS X verwendet

93

Ich möchte in der Lage sein, eine Datei zu verfolgen und zu sehen, welcher Prozess diese Datei berührt. Ist das möglich? Ich weiß, dass ich die Liste der offenen Prozesse im Aktivitätsmonitor sehen kann, aber ich denke, dass es für mich zu schnell geht, sie zu sehen. Der Grund dafür ist, dass ich ein Framework verwende und ich denke, dass die Systemversion des Frameworks anstelle der Debug-Version verwendet wird, und ich würde gerne sehen, welcher Prozess es berührt.

JPC
quelle
1
Dies ist eine Verwendungsfrage, die besser auf Super User gestellt wird
Michael Dautermann
HINWEIS: ^^^ IST EINE SEHR RELEVANTE, ähnliche Frage - FYI ;-)
Brad Parks

Antworten:

90

lsof listet geöffnete Dateien auf, kann jedoch für kurzzeitige Berührungen etwas umständlich sein (z. B. wenn die Datei beim Ausführen von lsof nicht geöffnet ist, wird sie nicht angezeigt).

Ich denke, Ihre beste Wahl wäre fernLightnings fseventer.app . Es ist "Nagware" und ermöglicht es Ihnen, die fsevents-API (grafisch) in Echtzeit anzusehen.

Shaun
quelle
39
lsof | grep myfilenamearbeitete für mich. Ich habe eine PDF-Datei in meinem Papierkorb, von der das System behauptet, dass sie verwendet wird. Seltsamerweise wird lsofbehauptet, dass es von verwendet wird Preview, Previewaber nicht ausgeführt zu werden scheint (z. B. wenn ich mit der Befehlstaste durch die laufenden Apps gehe), aber Activity Monitores wird angezeigt, dass es ausgeführt wird. Dumme Vorschau.
Dave Sag
Dies ist perfekt für vorübergehende Dateien (dh Dateien, die nicht geöffnet bleiben, sondern nur beim Speichern berührt werden).
Jeronimo Colon III
Ich hatte heute ein ähnliches Problem mit einer Datei in meinem Papierkorb, die von einem Zombie-Vorschau-Prozess gespeichert wurde. Das Öffnen und erneute Beenden der Vorschau löste das Problem für mich. Ich denke, Preview hält regelmäßig Dateien, obwohl es beendet wurde. Ich öffne häufig Bilder aus Evernote in der Vorschau, um sie zuzuschneiden, und meistens - meistens - auch nach dem Beenden der Vorschau warnt Evernote, dass das Bild in einer anderen Anwendung noch geöffnet ist.
Vihung
Dies scheint einem Problem ähnlich zu sein, das ich gerade habe - immer noch keine Lösung. Ich habe eine Datei mit Chrome heruntergeladen und sie dann mit Finder in einen anderen Ordner verschoben. Es wurde grau angezeigt, also habe ich mit lsof herausgefunden, wer die Datei geöffnet hat: Finder. Ich habe versucht, den Finder zwangsweise zu beenden (wodurch er automatisch neu gestartet wird). Das hat nicht funktioniert. Ich habe versucht, meinen Laptop zu schließen, um herauszufinden, dass dadurch alles in den Schlaf versetzt wird, und hoffentlich das Problem zu lösen. Das hat auch nicht funktioniert. lsof zeigt weiterhin Finder als Schuldigen an und wird weiterhin grau in der Benutzeroberfläche angezeigt.
Victor Engel
1
Interessanterweise schien das Schließen der Sucherfenster das Problem zu lösen. Wenn ich jedoch ein neues Finder-Fenster öffnete und zum selben Ordner navigierte, blieb das Problem bestehen. Ich habe das Problem behoben, indem ich die fehlerhafte Datei in den Papierkorb gezogen habe (eine Warnung ausgegeben habe, dass das Programm, in dem die Datei geöffnet ist, möglicherweise unerwünschte Auswirkungen hat) und die Datei dann erneut kopiert habe.
Victor Engel
94

Das ist einfach: sudo fs_usage | grep [path_to_file]

spaceboy.cz
quelle
10
Dies ist bei weitem die beste Antwort hier.
NuSkooler
fs_usage sollte als root ausgeführt werden ... es ist nicht die beste Lösung.
bontoJR
Dies zeigt fs Ereignisse? Wenn ein Prozess eine Datei geöffnet hat, aber nichts damit macht, wird hier nichts angezeigt. Oder schien zumindest meine Erfahrung zu sein. sudo fs_usage | grep musiclibraryzeigte nichts, sudo lsof | grep musiclibraryzeigte aber 3 Prozesse, die auf meine Musikbibliotheksdatenbankdateien zugreifen.
Gman
43

Aber ich habe 2 Minuten gegoogelt und deine Antwort hier gefunden .

$ lsof | grep [was auch immer]

Wo [was auch immer] durch den Dateinamen ersetzt wird, den Sie suchen. Auf diese Weise können Sie sehen, welches Programm Ihre Datei, die in den Papierkorb verschoben werden soll, verzweifelt festhält. Sobald Sie dieses Programm beenden, wird Ihr Papierkorb leer.

Michael Dautermann
quelle
1
Das Problem dabei ist, dass ich versuchen muss, lsof sehr schnell einzugeben. es könnte nur vorübergehend sein
JPC
13
lsof -r versetzt lsof in den Wiederholungsmodus
stoutyhk
Es ist sinnvoll, es nur für den Fall zu überprüfen, dass die Datei freigegeben wurde.
Ray Hunter
16

Der schnellere Weg ist:

$ lsof [path_to_file]

Diese Lösung erfordert kein Root-Passwort und gibt Ihnen das folgende eindeutige Ergebnis zurück:

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
Finder     497  JR7   21r   REG    1,2   246223 33241712 image.jpg
QuickLook 1007  JR7  txt    REG    1,2   246223 33241712 image.jpg
bontoJR
quelle
15

Eine andere Option ist Faultier . Es ist eine kostenlose Open-Source-GUI für LSOF, die andere erwähnt haben.

Kavalkade
quelle
1
Wow, das ist ein wirklich tolles Tool, danke fürs Teilen! Es funktionierte perfekt, um einen Prozess zu finden, den ich aus den Augen verloren hatte.
RayB
2
Ich bevorzuge Kommandozeilenlösungen, weil sie portabler sind, aber ich muss zugeben, dass dies ein sehr schönes Tool ist! Danke für den Vorschlag.
Form