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.

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).

La columna FD muestra cómo se está usando el archivo. Un número seguido de “r” significa acceso de lectura, “w” significa escritura, y “u” significa lectura y escritura. Si ves “cwd”, el proceso tiene esa ubicación como su directorio de trabajo actual. Esto pasa cuando tienes una ventana de Terminal abierta en una carpeta del disco.

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 -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 -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

Una vez que conozcas el ID del proceso (PID) de la salida de lsof, puedes terminarlo:

kill 1234

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

kill -9 1234

Ten cuidado con esto. Terminar procesos del sistema como mds puede causar problemas temporales. El proceso normalmente se reinicia automáticamente, pero podrías ver que Spotlight se comporta de forma extraña por un minuto. Terminar aplicaciones como Finder por lo general es seguro; macOS reiniciará el Finder automáticamente.

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.

Indexación de Spotlight: Los procesos mds, mds_stores y mdworker indexan los discos nuevos automáticamente. Puedes esperar a que terminen, desactivar la indexación con sudo mdutil -i off /Volumes/NombreDeTuDisco, o terminarlos directamente.

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 se creó específicamente para este problema. Muestra tus discos conectados, identifica qué procesos están bloqueando cada uno y te deja cerrar esos procesos con un clic. Es básicamente un envoltorio gráfico del trabajo detectivesco que requiere lsof, más la inteligencia para manejar los procesos del sistema de forma segura.

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.

Si prefieres no usar la Terminal cada vez, Ejecta te muestra exactamente qué proceso está bloqueando tu disco — y te deja cerrarlo con un solo clic, directo desde tu barra de menús.

Comprar ahora — $9.99