Obtener la lista de archivos abiertos (descriptores) en OS X


Me gustaría obtener una lista de archivos abiertos en un proceso en os x (10.9.1). En Linux pude obtener esto de /proc/PID/fd. Sin embargo, no estoy seguro de cómo obtener lo mismo en OS X. Encontré que el procfs no está presente en OS X (por defecto. posibles implementaciones presentes, pero no quiero ir por ese camino).

Entonces, ¿cómo obtengo (de forma nativa) la lista de archivos abiertos en un proceso en OS X. Una forma es lsof. ¿hay algún otro soporte disponible? por favor, hágamelo saber dónde puedo obtener más información sobre este.

Gracias.

Author: codeforester, 2014-01-07

7 answers

Al menos en OSX 10.10 (Yosemite, no comprobó Mavericks), puede obtener la lista de archivos abiertos por proceso a través de la aplicación monitor de actividad predeterminada. Simplemente haga doble clic en el proceso relevante en la lista y seleccione la pestaña "Abrir archivos y puertos" en la ventana emergente.

Consejo: el atajo cmd+f en ese panel permite buscar y resaltar el contenido.

 30
Author: Fuu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-11 10:45:27

Tuve dificultades para conseguir que Activity Monitor mostrara los archivos abiertos para un proceso que se estaba ejecutando como root (a través de sudo). La pregunta original menciona lsof, y hace el truco exactamente. Si conoces el nombre del proceso o PID, es súper rápido.

Buscar procesos por nombre:

lsof -c processname

Buscar procesos por PID:

lsof -p 123

(Prefijo con sudo según sea necesario, por ejemplo, si usted no es el propietario del proceso.)

 31
Author: smitelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-02 23:45:32

Esto funciona para algunas cosas:

sudo fs_usage | grep dev

Para archivos /dev/ o similares.

 3
Author: eulerworks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-26 08:09:16

Utilizo la aplicación What's Open que es muy handfull (con filtros, selección de disco,...).

Lo puedes encontrar allí: http://whatsopen.en.softonic.com/mac .

 2
Author: Laurent Lasudry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-08 16:36:54

El enfoque limpio y simple para inspeccionar el proceso actual ( es decir, el equivalente de /proc/self/fd en Linux) es usar ls /dev/fd/:

Por ejemplo,

$ touch "file"
$ exec 3<>file

$ ls /dev/fd/    

0 1 2 3
 2
Author: Travis Clarke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-06 15:00:49

Desde que preguntaste "¿Hay algún otro soporte [además de lsof] disponible?"prueba esto:

Crear una herramienta de línea de comandos utilizando la API C "proc_pidinfo" referenciada en la respuesta seleccionada a esta pregunta: ¿Cómo puedo obtener programáticamente la lista de descriptores de archivo abiertos para un PID dado en OS X?

Puede usar proc_pidinfo con la opción PROC_PIDLISTFDS para enumerar los archivos utilizados por un proceso dado. A continuación, puede utilizar proc_pidfdinfo en cada archivo PROC_PIDFDVNODEPATHINFO opción para obtener su ruta.

 1
Author: Mike C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-07 15:36:32

Lista de archivos abiertos en / Volumes/VolumeName:

lsof | grep "/Volumes/VolumeName"
 0
Author: Dmitry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-23 07:43:51