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.
Tu disco externo no se expulsa. macOS te da el mensaje enloquecedoramente vago de que “uno o más programas pueden 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 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
Reemplaza “NombreDeTuDisco” con el nombre real de tu disco. Si el nombre tiene espacios, envuelve toda la ruta entre comillas:
lsof "/Volumes/Mi Disco de Respaldo"
Esto devuelve una lista de cada proceso que tiene un manejador 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 que está siendo accedido.
Leyendo la salida
Una salida típica de lsof se ve algo 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 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 siendo accedido).
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.
Descubriendo 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 -c mds /Volumes/NombreDeTuDisco
Esto muestra solo procesos cuyos nombres empiezan con “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 -u tunombredeusuario /Volumes/NombreDeTuDisco
Usando 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.
Terminando el proceso bloqueador
Una vez que conoces 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 usualmente se reiniciará automáticamente, pero podrías ver que Spotlight se comporta extraño por un minuto. Terminar aplicaciones como Finder es generalmente seguro; macOS reiniciará Finder automáticamente.
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.
Indexación de Spotlight: Los procesos mds, mds_stores, y mdworker indexan nuevos discos 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 archivos recientes referenciados incluso después de que has cerrado los documentos. Aplicaciones creativas como Photoshop o editores de video son infractores comunes. Cerrar la app completamente usualmente libera 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 “¿qué está usando este disco?”
Ejecta fue construido específicamente para este problema. Muestra tus discos conectados, identifica qué procesos están bloqueando cada uno, y te permite cerrar esos procesos con un clic. Es esencialmente una interfaz gráfica para el trabajo de detective que lsof requiere, más la inteligencia para manejar 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.
Tired of drive ejection issues?
Ejecta shows you exactly what's blocking your drive and lets you fix it with one click.
Get Ejecta for $14.99