Zobacz, jaki proces używa pliku w systemie Mac OS X

93

Chciałbym móc śledzić plik i zobaczyć, który proces dotyka tego pliku. Czy to jest możliwe? Wiem, że widzę listę otwartych procesów w monitorze aktywności, ale myślę, że dzieje się to zbyt szybko, żebym to zobaczył. Powodem tego jest to, że używam frameworka i myślę, że wersja systemowa frameworka jest używana zamiast wersji debugowania i chciałbym zobaczyć, który proces go dotyka.

JPC
źródło
1
to jest pytanie użytkowe lepiej zadane w Super User
Michael Dautermann
1
UWAGA: ^^^ BARDZO WAŻNE, podobne pytanie - FYI ;-)
Brad Parks

Odpowiedzi:

90

lsof wyświetli listę otwartych plików, ale może to być trochę niezręczne w przypadku chwilowych dotknięć (np. jeśli plik nie jest otwarty podczas działania lsof, nie jest wyświetlany).

Myślę, że najlepszym rozwiązaniem będzie fseventer.app firmy fernLightning . Jest to „nagware” i pozwala na oglądanie (graficznie) API fsevents w czasie rzeczywistym.

Shaun
źródło
39
lsof | grep myfilenamepracował dla mnie. Mam w Koszu plik PDF, który według systemu jest używany. Dziwnie lsoftwierdzi, że jest używany, Previewale Previewwydaje się, że nie działa (np. Kiedy przechodzę do uruchomionych aplikacji), ale Activity Monitorpokazuje, że działa. Głupi podgląd.
Dave Sag
Jest to idealne rozwiązanie dla plików przejściowych (tj. Plików, które nie są otwierane, ale tylko dotykane podczas zapisywania).
Jeronimo Colon III,
Miałem dziś podobny problem z plikiem w Koszu, który był przetrzymywany przez proces podglądu zombie. Otwarcie podglądu i ponowne zamknięcie go rozwiązało problem. Myślę, że Preview regularnie przechowuje pliki, mimo że został zamknięty. Często otwieram obrazy z Evernote w podglądzie, aby je przyciąć, a w większości przypadków - częściej niż nie - nawet po zamknięciu podglądu Evernote twierdzi, że obraz jest nadal otwarty w innej aplikacji.
Vihung,
Wydaje się, że jest to podobne do problemu, który mam teraz - nadal nie ma rozwiązania. Pobrałem plik przy użyciu przeglądarki Chrome, a następnie przeniosłem go za pomocą Findera do innego folderu. Był szary, więc użyłem lsof, aby dowiedzieć się, kto miał otwarty plik: Finder. Próbowałem wymusić zamknięcie Findera (który automatycznie go ponownie uruchamia). To nie zadziałało. Próbowałem zamknąć laptopa, myśląc, że to uśpi wszystko i miejmy nadzieję, że rozwiążę problem. To też nie zadziałało. lsof nadal wyświetla Findera jako winowajcę i nadal jest wyświetlany na szaro w interfejsie użytkownika.
Victor Engel,
1
Co ciekawe, zamknięcie okien wyszukiwarki wydawało się rozwiązać problem. Jeśli jednak otworzyłem nowe okno wyszukiwarki i przeszedłem do tego samego folderu, problem pozostał. Rozwiązałem problem, przeciągając błędny plik do kosza (generując ostrzeżenie, że mogą wystąpić nieoczekiwane efekty w programie, w którym plik jest otwarty), a następnie ponownie skopiowałem plik.
Victor Engel,
95

To proste: sudo fs_usage | grep [path_to_file]

spaceboy.cz
źródło
10
To zdecydowanie najlepsza odpowiedź.
NuSkooler
1
fs_usage powinno być uruchamiane jako root ... to nie jest najlepsze rozwiązanie.
bontoJR
To pokazuje wydarzenia FS? Jeśli proces ma otwarty plik, ale nic z nim nie robi, nic się tutaj nie pojawia. A przynajmniej wydawało się, że to moje doświadczenie. sudo fs_usage | grep musiclibrarynie pokazał niczego, ale sudo lsof | grep musiclibrarypokazał 3 procesy uzyskujące dostęp do plików mojej bazy danych biblioteki muzycznej.
gman
43

Ale spędziłem 2 minuty na Google i znalazłem tutaj odpowiedź .

$ lsof | grep [cokolwiek]

Gdzie [cokolwiek] jest zastępowane nazwą pliku, którego szukasz. Dzięki temu możesz zobaczyć, który program desperacko trzyma twój plik, który ma zostać usunięty. Po wyjściu z tego programu kosz zostanie opróżniony.

Michael Dautermann
źródło
1
Problem polega na tym, że muszę bardzo szybko wpisać lsof. może to być tylko przejściowe
KWJ
13
lsof -r ustawia lsof w trybie powtarzania
stoutyhk
Ma sens, aby go grepować na wypadek, gdyby plik został zwolniony.
Ray Hunter
16

Szybszy sposób to:

$ lsof [path_to_file]

To rozwiązanie nie wymaga hasła roota i zwraca następujący, przejrzysty wynik:

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
źródło
15

Inną opcją jest lenistwo . Jest to darmowy graficzny interfejs użytkownika typu open source dla LSOF, o którym wspominali inni.

kawalkada
źródło
1
Wow, to naprawdę świetne narzędzie, dzięki za udostępnienie! Zadziałało idealnie, aby znaleźć proces, którego straciłem.
RayB,
2
Wolę rozwiązania wiersza poleceń, ponieważ są bardziej przenośne, ale muszę przyznać, że jest to bardzo fajne narzędzie! Dzieki za sugestie.
Formularz