Scopri quale processo utilizza un file in Mac OS X.


93

Vorrei essere in grado di monitorare un file e vedere quale processo sta toccando quel file. È possibile? So di poter vedere l'elenco dei processi aperti in Activity Monitor, ma penso che stia succedendo rapidamente per me vederlo. La ragione di ciò è che sto utilizzando un framework e penso che la versione di sistema del framework venga utilizzata al posto della versione di debug e mi piacerebbe vedere quale processo lo sta toccando.


1
questa è una domanda di utilizzo che è meglio fare su Super User
Michael Dautermann


NOTA: ^^^ È UNA DOMANDA MOLTO RILEVANTE, simile - FYI ;-)
Brad Parks

Risposte:


90

lsof elencherà i file aperti, ma può essere un po 'imbarazzante per tocchi momentanei (ad esempio, se il file non è aperto quando lsof viene eseguito, non viene visualizzato).

Penso che la soluzione migliore sarebbe fseventer.app di fernLightning . È "nagware" e ti consente di guardare (graficamente) l'API di fsevents in tempo reale.


39
lsof | grep myfilenameha funzionato per me. Ho un file PDF nel mio Cestino che il sistema dichiara è in uso. Stranamente lsofafferma che è in uso Previewma Previewnon sembra essere in esecuzione (ad es. Quando comando la scheda tramite le app in esecuzione) ma Activity Monitormostra che è in esecuzione. Stupida anteprima.
Dave Sag

Questo è perfetto per i file temporanei (cioè i file che non vengono tenuti aperti ma che vengono solo toccati durante il salvataggio).
Jeronimo Colon III

Oggi ho avuto un problema simile con un file nel mio Cestino trattenuto da un processo di anteprima zombi. L'apertura di Anteprima e la chiusura di nuovo ha risolto il problema per me. Penso che Preview tenga regolarmente i file anche se si è chiuso. Spesso apro le immagini da Evernote in Anteprima per ritagliarle e la maggior parte delle volte, il più delle volte, anche dopo aver chiuso Anteprima, Evernote fa guerra al fatto che l'immagine è ancora aperta in un'altra applicazione.
Vihung

Sembra simile a un problema che sto riscontrando in questo momento - ancora nessuna soluzione. Ho scaricato un file utilizzando Chrome, quindi l'ho spostato utilizzando il Finder in un'altra cartella. Appariva grigio, quindi ho usato lsof per scoprire chi aveva il file aperto: Finder. Ho provato a forzare la chiusura del Finder (che lo riavvia automaticamente). Non ha funzionato. Ho provato a chiudere il mio laptop, pensando che avrebbe messo tutto a dormire e, si spera, a risolvere il problema. Neanche questo ha funzionato. lsof continua a mostrare Finder come il colpevole e continua a essere visualizzato in grigio nell'interfaccia utente.
Victor Engel

1
È interessante notare che la chiusura delle finestre del Finder sembrava risolvere il problema. Tuttavia, se aprivo una nuova finestra del Finder e navigavo nella stessa cartella, il problema rimaneva. Ho risolto il problema trascinando il file errato nel cestino (producendo un avviso che potrebbero esserci effetti indesiderati nel programma che ha il file aperto), quindi ricopiando il file.
Victor Engel

95

È semplice: sudo fs_usage | grep [path_to_file]


10
Questa è di gran lunga la migliore risposta qui.
NuSkooler

fs_usage dovrebbe essere eseguito come root ... non è la soluzione migliore.
bontoJR

Questo mostra gli eventi fs? Se un processo ha un file aperto ma non esegue alcuna operazione, non viene visualizzato nulla qui. O almeno sembrava essere la mia esperienza. sudo fs_usage | grep musiclibrarynon ha mostrato nulla ma ha sudo lsof | grep musiclibrarymostrato 3 processi che accedono ai file del database della mia libreria musicale.
gman

43

Ma ho passato 2 minuti a cercare su Google e ho trovato la tua risposta qui .

$ lsof | grep [qualunque cosa]

Dove [qualunque] viene sostituito con il nome del file che stai cercando. Con questo, puoi vedere quale programma sta trattenendo disperatamente il tuo file che sta per essere cestinato. Una volta uscito da quel programma, il cestino si svuoterà.


1
Il problema è che devo provare a digitare lsof molto velocemente. potrebbe essere solo transitorio
JPC

13
lsof -r mette lsof in modalità di ripetizione
stoutyhk

Ha senso grep solo nel caso in cui il file sia stato rilasciato.
Ray Hunter

16

Il modo più veloce è:

$ lsof [path_to_file]

Questa soluzione non richiede la password di root e restituisce il seguente risultato chiaro:

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

15

Un'altra opzione è Bradipo . È una GUI gratuita e open source per LSOF che altri hanno menzionato.


1
Wow, questo è davvero un ottimo strumento grazie per la condivisione! Ha funzionato perfettamente per trovare un processo di cui avevo perso le tracce.
RayB

2
Tendo a preferire le soluzioni da riga di comando perché sono più portabili, ma devo ammettere che questo è uno strumento molto carino! Grazie per il suggerimento.
Modulo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.