El comando lsof explicado para usuarios de Mac

Domina el comando lsof para averiguar qué procesos tienen archivos abiertos en tu Mac. Una guía para desarrolladores y usuarios avanzados.

(Updated )

Tu disco externo no se expulsa. macOS te da el mensaje exasperantemente vago de que “uno o más programas podrían estar usándolo”. ¿Cuáles programas? No lo dice. Aquí es donde entra lsof.

El nombre significa “list open files” (listar archivos abiertos), y hace exactamente eso. En los sistemas basados en Unix como macOS, casi todo se trata como un archivo, incluyendo las conexiones de red, los dispositivos y los volúmenes de disco. Cuando no puedes expulsar un disco, lsof te dice con precisión qué proceso lo tiene secuestrado.

Sintaxis básica

La forma más simple de usar lsof para los problemas de expulsión es:

lsof /Volumes/NombreDeTuDisco

Reemplaza “NombreDeTuDisco” con el nombre real de tu disco. Si el nombre tiene espacios, encierra toda la ruta entre comillas:

lsof "/Volumes/Mi Disco de Respaldo"

Esto devuelve una lista de cada proceso que tiene un identificador de archivo abierto en ese volumen. Cada línea muestra el nombre del proceso, su ID (PID), el usuario que lo ejecuta e información sobre el archivo específico al que se accede.

Leer la salida

Una salida típica de lsof se ve más o menos así:

COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mds_store  1234   root   4r   REG   1,12   524288  ...  /Volumes/External/.Spotlight-V100/...
Finder     5678   you    3r   DIR   1,12     1024  ...  /Volumes/External

Las columnas que más importan son COMMAND (el nombre del proceso), PID (el ID del proceso que usarías para terminarlo) y NAME (la ruta real del archivo al que se accede).

FD indica cómo se abrió el archivo: r para lectura, w para escritura y u para ambas. No indica la actividad actual ni demuestra que no haya escrituras pendientes en el volumen.

Averiguar qué está bloqueando tu disco

Para los problemas de expulsión en específico, por lo general solo necesitas saber qué nombres de procesos aparecen. Los culpables comunes incluyen mds y mds_stores (indexación de Spotlight), Finder, QuickLookUIService (generación de miniaturas) y fsevents (observador del sistema de archivos).

Si ves mucha salida y quieres acotarla, puedes usar grep:

lsof /Volumes/NombreDeTuDisco | grep -v "^COMMAND"

Esto quita la línea de encabezado para que solo veas los procesos reales. Si quieres solo los nombres únicos de los procesos:

lsof /Volumes/NombreDeTuDisco | awk '{print $1}' | sort -u

Opciones útiles

La opción -c filtra por nombre de comando. Si sospechas que Spotlight es el problema:

lsof -a -c mds /Volumes/NombreDeTuDisco

Esto muestra solo los procesos cuyos nombres empiezan con “mds”.

La opción +D lista de forma recursiva todos los archivos abiertos en un directorio:

lsof +D /Volumes/NombreDeTuDisco

Esto es más exhaustivo que la sintaxis básica, pero puede ser lento en discos grandes con muchos archivos.

Para ver qué procesos tiene abiertos un usuario específico en el disco:

lsof -a -u tunombredeusuario /Volumes/NombreDeTuDisco

Usar lsof sin sudo

De forma predeterminada, lsof solo muestra los procesos que pertenecen a tu cuenta de usuario. Los procesos del sistema que ejecuta root (como mds de Spotlight) no aparecerán a menos que ejecutes lsof con sudo:

sudo lsof /Volumes/NombreDeTuDisco

Tendrás que escribir tu contraseña. Para solucionar problemas de expulsión, usar sudo casi siempre es necesario, ya que los procesos del sistema con frecuencia son los bloqueadores.

Terminar el proceso que bloquea

Guarda tu trabajo, termina las copias y los backups y cierra las apps normalmente antes de reintentar la expulsión. Forzar el cierre o la expulsión puede causar pérdida de datos; Ejecta no certifica la seguridad de las escrituras.

kill 1234

Reemplaza 1234 con el PID real. Si eso no funciona, puedes forzarlo:

kill -9 1234

Los nombres de los procesos de Spotlight no demuestran que solo estén leyendo. No fuerces el cierre de mds o mds_stores para liberar un disco. Espera, cierra tus apps e intenta una expulsión normal. Ejecta identifica estos procesos, pero no ofrece el cierre habitual de procesos del sistema. Si el disco sigue bloqueado, guarda todo y apaga completamente el Mac antes de desconectarlo.

Para las aplicaciones que son tuyas (como una ventana de Terminal con un shell parado en el directorio del disco), es más limpio simplemente cerrar la aplicación de forma normal o salir del disco antes de intentar expulsar.

Escenarios comunes

Terminal con el directorio actual en el disco: Si hiciste cd a una carpeta de tu disco externo, ese proceso de shell mantendrá el disco abierto. Haz cd a otro lado (cd ~) o cierra esa ventana de Terminal.

Ventanas del Finder: Si el Finder tiene una ventana abierta en el disco, o incluso si tiene el disco seleccionado en la barra lateral, puede impedir la expulsión. Cierra cualquier ventana del Finder que muestre el contenido del disco.

Los nombres de los procesos de Spotlight no demuestran que solo estén leyendo. No fuerces el cierre de mds o mds_stores para liberar un disco. Espera, cierra tus apps e intenta una expulsión normal. Ejecta identifica estos procesos, pero no ofrece el cierre habitual de procesos del sistema. Si el disco sigue bloqueado, guarda todo y apaga completamente el Mac antes de desconectarlo.

Apps en segundo plano con archivos abiertos: Algunas aplicaciones mantienen referenciados los archivos recientes incluso después de que cierras los documentos. Las aplicaciones creativas como Photoshop o los editores de video son culpables comunes. Cerrar la app por completo normalmente libera los archivos.

Más allá de la línea de comandos

Si no te sientes cómodo con la Terminal o no quieres descifrar la salida de lsof cada vez que necesitas desconectar un disco, hay opciones gráficas.

El Monitor de Actividad puede mostrarte los archivos abiertos de un proceso específico, pero ya tienes que saber qué proceso inspeccionar. No responde con facilidad a la pregunta “¿qué está usando este disco?”.

Ejecta: Ejecta ofrece diagnóstico gratuito de discos sin periodo de prueba. La licencia de pago desbloquea el cierre y la expulsión para apps compatibles, Expulsar todo y los controles de Time Machine. Los procesos del sistema pueden requerir esperar, autorización o apagar el Mac. Guarda tu trabajo y termina las transferencias primero.

La línea de comandos es poderosa para quienes la prefieren, pero no debería ser obligatoria para algo tan simple como desconectar un disco.

Ejecta ofrece diagnóstico gratuito de discos sin periodo de prueba. La licencia de pago desbloquea el cierre y la expulsión para apps compatibles, Expulsar todo y los controles de Time Machine. Los procesos del sistema pueden requerir esperar, autorización o apagar el Mac. Guarda tu trabajo y termina las transferencias primero.

Comprar ahora - $29 $9.99