El comando lsof explicado para usuarios de Mac

Domina el comando lsof para descubrir 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 pueden estar usándolo». ¿Qué programas? No lo dice. Aquí es donde entra lsof.

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

Sintaxis básica

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

lsof /Volumes/NombreDeTuDisco

Sustituye «NombreDeTuDisco» por el nombre real de tu disco. Si el nombre tiene espacios, pon toda la ruta entre comillas:

lsof "/Volumes/Mi Disco de Respaldo"

Esto devuelve una lista de cada proceso que tiene un descriptor 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 concreto al que se accede.

Cómo leer la salida

Una salida típica de lsof tiene este aspecto:

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   tu     3r   DIR   1,12     1024  ...  /Volumes/External

Las columnas más importantes 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.

Cómo descubrir qué está bloqueando tu disco

Para problemas de expulsión específicamente, usualmente 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 reducirla, puedes usar grep:

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

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

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

Flags útiles

El flag -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 por «mds».

El flag +D lista recursivamente 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

Por defecto, lsof solo muestra procesos de tu cuenta de usuario. Los procesos del sistema ejecutados por root (como el mds de Spotlight) no aparecerán a menos que ejecutes lsof con sudo:

sudo lsof /Volumes/NombreDeTuDisco

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

Cómo terminar el proceso bloqueador

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 aplicaciones que tú controlas (como una ventana de Terminal con un shell en el directorio del disco), es más limpio simplemente cerrar la aplicación normalmente o navegar fuera del disco antes de intentar expulsar.

Escenarios comunes

Terminal con directorio actual en el disco: Si has hecho cd a una carpeta en tu disco externo, ese proceso de shell mantendrá el disco abierto. O haces cd a otro lugar (cd ~) o cierras esa ventana de Terminal.

Ventanas de Finder: Si Finder tiene una ventana abierta al disco, o incluso si tiene el disco seleccionado en la barra lateral, puede prevenir la expulsión. Cierra cualquier ventana de 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 archivos recientes referenciados incluso después de que has cerrado los documentos. Aplicaciones creativas como Photoshop o los editores de vídeo son infractores habituales. Cerrar la app por completo suele liberar los archivos.

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

Si no te sientes cómodo con 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 archivos abiertos para un proceso específico, pero tienes que ya saber qué proceso inspeccionar. No responde fácilmente 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 - $29 $9.99