Voir quel processus utilise un fichier sous Mac OS X

93

Je voudrais pouvoir suivre un fichier et voir quel processus touche ce fichier. Est-ce possible? Je sais que je peux voir la liste des processus ouverts dans le moniteur d'activité, mais je pense que cela se passe rapidement pour que je la voie. La raison en est que j'utilise un framework et je pense que la version système du framework est utilisée à la place de la version de débogage et j'aimerais voir quel processus le touche.

JPC
la source
1
c'est une question d'utilisation mieux posée sur Super User
Michael Dautermann
NOTE: ^^^ EST UNE QUESTION TRÈS PERTINENTE, similaire - FYI ;-)
Brad Parks

Réponses:

90

lsof listera les fichiers ouverts, mais cela peut être un peu gênant pour les touches momentanées (par exemple, si le fichier n'est pas ouvert lorsque lsof s'exécute, il ne s'affiche pas).

Je pense que votre meilleur pari serait fseventer.app de fernLightning . C'est "nagware", et vous permet de regarder (graphiquement) l'API fsevents en temps réel.

Shaun
la source
39
lsof | grep myfilenametravaillé pour moi. J'ai un fichier PDF dans ma corbeille que le système prétend est en cours d'utilisation. Prétend étrangement lsofqu'il est utilisé par Previewmais Previewne semble pas être en cours d'exécution (par exemple, lorsque je commande-tab à travers les applications en cours d'exécution), mais le Activity Monitormontre en cours d'exécution. Aperçu stupide.
Dave Sag
C'est parfait pour les fichiers transitoires (c'est-à-dire les fichiers qui ne sont pas maintenus ouverts mais qui ne sont touchés que lors de l'enregistrement).
Jeronimo Colon III
J'ai eu un problème similaire aujourd'hui avec un fichier dans ma corbeille détenu par un processus de prévisualisation zombie. Ouvrir l'aperçu et le quitter à nouveau a résolu le problème pour moi. Je pense que Preview garde régulièrement la main sur les fichiers bien qu'il se soit arrêté. J'ouvre souvent des images d'Evernote dans Aperçu afin de les recadrer, et la plupart du temps - le plus souvent - même après avoir quitté Aperçu, Evernote fait valoir que l'image est toujours ouverte dans une autre application.
Vihung
Cela semble similaire à un problème que j'ai en ce moment - toujours pas de solution. J'ai téléchargé un fichier à l'aide de Chrome, puis je l'ai déplacé à l'aide du Finder vers un autre dossier. Il est apparu en gris, j'ai donc utilisé lsof pour savoir qui avait ouvert le fichier: Finder. J'ai essayé de forcer la fermeture du Finder (qui le relance automatiquement). Cela n'a pas fonctionné. J'ai essayé de fermer mon ordinateur portable, en pensant que cela mettrait tout en veille et, espérons-le, résoudre le problème. Cela n'a pas fonctionné non plus. lsof continue d'afficher Finder comme le coupable, et il continue à apparaître en gris dans l'interface utilisateur.
Victor Engel
1
Fait intéressant, la fermeture des fenêtres du Finder semblait résoudre le problème. Cependant, si j'ouvre une nouvelle fenêtre de recherche et que je navigue vers le même dossier, le problème persiste. J'ai résolu le problème en faisant glisser le fichier errant vers la corbeille (produisant un avertissement indiquant qu'il pourrait y avoir des effets indésirables dans le programme qui a ouvert le fichier), puis en recopiant le fichier.
Victor Engel
95

C'est simple: sudo fs_usage | grep [path_to_file]

spaceboy.cz
la source
10
C'est de loin la meilleure réponse ici.
NuSkooler
fs_usage doit être exécuté en tant que root ... ce n'est pas la meilleure solution.
bontoJR
Cela montre les événements fs? Si un processus a un fichier ouvert mais ne fait rien avec lui, rien ne s'affiche ici. Ou du moins semblait être mon expérience. sudo fs_usage | grep musiclibraryn'a montré rien mais a sudo lsof | grep musiclibrarymontré 3 processus accédant à mes fichiers de base de données musiclibrary.
gman le
43

Mais j'ai passé 2 minutes sur Google et j'ai trouvé votre réponse ici .

$ lsof | grep [peu importe]

Où [quel que soit] est remplacé par le nom de fichier que vous recherchez. Avec cela, vous pouvez voir quel programme tient désespérément votre fichier sur le point d'être mis à la corbeille. Une fois que vous quittez ce programme, votre corbeille se videra.

Michael Dautermann
la source
1
Le problème, c'est que je dois essayer de taper lsof très rapidement. cela pourrait être seulement transitoire
JPC
13
lsof -r met lsof en mode de répétition
stoutyhk
Il est logique de le greffer juste au cas où le fichier aurait été publié.
Ray Hunter
16

Le moyen le plus rapide est:

$ lsof [path_to_file]

Cette solution ne nécessite pas le mot de passe root et vous donne le résultat clair suivant:

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
la source
15

Une autre option est Sloth . C'est une interface graphique libre et open source pour LSOF que d'autres ont mentionnée.

cavalcade
la source
1
Wow c'est un très bon outil merci pour le partage! Cela a fonctionné parfaitement pour trouver un processus dont j'avais perdu la trace.
RayB
2
J'ai tendance à préférer les solutions en ligne de commande car elles sont plus portables, mais je dois admettre que c'est un très bel outil! Merci pour la suggestion.
Formulaire