web-dev-qa-db-fra.com

Obtenir la liste des fichiers ouverts (descripteurs) sous OS X

Je voudrais obtenir une liste des fichiers ouverts dans un processus sur os x (10.9.1). Sous Linux, j'ai pu obtenir ceci à partir de /proc/PID/fd. Cependant, je ne sais pas comment obtenir la même chose sur OS X. J'ai trouvé que le procfs n'est pas présent sur OS X (par défaut. Implémentations possibles présentes, mais je ne veux pas aller dans ce sens).

Alors, comment puis-je obtenir (nativement) la liste des fichiers ouverts dans un processus sous OS X. Une façon est lsof. existe-t-il un autre support disponible? s'il vous plaît laissez-moi savoir où je peux obtenir plus d'informations à ce sujet.

Merci.

49
user3169543

Au moins sur OSX 10.10 (Yosemite, n'a pas vérifié Mavericks), vous pouvez obtenir la liste des fichiers ouverts par processus via l'application de surveillance d'activité par défaut. Double-cliquez simplement sur le processus correspondant dans la liste et sélectionnez l'onglet "Ouvrir les fichiers et les ports" dans la fenêtre contextuelle.

Astuce: le raccourci cmd + f sur ce volet permet de rechercher et de mettre en surbrillance le contenu.

38
Fuu

J'ai eu du mal à obtenir Activity Monitor pour afficher les fichiers ouverts pour un processus qui s'exécutait en tant que root (via Sudo). La question d'origine mentionne lsof et fait exactement l'affaire. Si vous connaissez le nom du processus ou PID, c'est super rapide.

Recherchez les processus par nom:

lsof -c processname

Trouver des processus par PID:

lsof -p 123

(Préfixez avec Sudo si nécessaire, par exemple si vous n'êtes pas le propriétaire du processus.)

44
smitelli

Cela fonctionne pour certaines choses:

Sudo fs_usage | grep dev

pour /dev/ fichiers ou similaire.

6
eulerworks

L'approche propre et simple pour inspecter le processus actuel ( c'est-à-dire l'équivalent de /proc/self/fd sous Linux) consiste à utiliser ls /dev/fd/:

par exemple

$ touch "file"
$ exec 3<>file

$ ls /dev/fd/    

0 1 2 3
4
Travis Clarke

J'utilise l'application What's Open qui est très pratique (avec filtres, sélection de disque, ...).

Vous pouvez le trouver ici: http://whatsopen.fr.softonic.com/mac .

2
Laurent Lasudry

Puisque vous avez demandé "Existe-t-il un autre support [que lsof] disponible?", Essayez ceci:

Créez un outil de ligne de commande en utilisant l'API C "proc_pidinfo" référencée dans la réponse sélectionnée à cette question: Comment puis-je obtenir par programme la liste des descripteurs de fichiers ouverts pour un PID donné sur OS X?

Vous pouvez utiliser proc_pidinfo avec l'option PROC_PIDLISTFDS pour énumérer les fichiers utilisés par un processus donné. Vous pouvez ensuite utiliser proc_pidfdinfo sur chaque fichier tour à tour avec l'option PROC_PIDFDVNODEPATHINFO pour obtenir son chemin.

1
Mike C.

Liste les fichiers ouverts sur/Volumes/VolumeName:

lsof | grep "/Volumes/VolumeName"
1
Dmitry