← Volver al Blog

Puerto en uso en Mac: cómo encontrarlo y solucionarlo

Cualquier error de "puerto en uso" en Mac se reduce a una cosa: otro proceso ocupa el puerto. La solución universal de tres pasos que sirve para el 3000, el 8080, el 5000 o cualquier puerto.

“Puerto en uso”, “address already in use”, EADDRINUSE, “port 3000 is already allocated”: son todos el mismo problema con palabras distintas. Un proceso ya ocupa el puerto que quieres. Este es el único método que soluciona todas sus variantes en un Mac, sin importar el puerto ni el programa.

La causa universal

Solo un programa puede escuchar en un puerto a la vez. Cuando un segundo programa intenta vincularse a un puerto ya ocupado, el sistema operativo lo rechaza, y lo que sea que estés ejecutando traduce ese rechazo a su propio mensaje de error. La redacción cambia; la causa nunca.

Así que la solución siempre son los mismos tres pasos: encuentra qué ocupa el puerto → libéralo o cambia el tuyo → confirma.

Paso 1: Encuentra qué ocupa el puerto

Pon tu número de puerto:

sudo lsof -i :3000 -n -P
COMMAND   PID   USER   ...  NODE NAME
node     1421  aaron   ...  TCP *:3000 (LISTEN)

Esa única línea te dice todo lo que necesitas: el programa (node), su PID (1421) y que está escuchando (LISTEN) en el puerto 3000. Si solo te importa el nombre del proceso, consulta qué app usa un puerto en Mac.

Si lsof no devuelve nada pero aun así obtienes el error, lo más probable es que el puerto esté atascado en TIME_WAIT por una conexión cerrada hace poco; lo explicamos en address already in use.

Paso 2a: Libera el puerto (si es seguro detenerlo)

Si el proceso es un servidor de desarrollo viejo o un script olvidado, termínalo. El comando de una línea:

kill -9 $(lsof -ti :3000)

Prefiere primero un cierre elegante, que permite al proceso limpiar antes de salir:

kill $(lsof -ti :3000)

Recurre a -9 (SIGKILL) solo si el kill elegante (SIGTERM) no funciona. La diferencia importa para cualquier cosa con estado sin guardar; consulta matar un proceso por puerto en Mac.

Paso 2b: O cambia el puerto de tu app (si no lo es)

Cuando no puedes identificar qué ocupa el puerto, o es un servicio del sistema, no lo mates: mueve tu propia app.

# Node
PORT=3001 npm start

# Vite (en vite.config o por CLI)
npm run dev -- --port 5174

# Flask
flask run --port 5001

# Rails
rails server -p 3001

Cambiar tu puerto es la opción más segura por defecto siempre que no tengas claro qué es el otro proceso.

Paso 3: Confirma que funcionó

Vuelve a ejecutar la búsqueda. No debería devolver nada:

lsof -i :3000 -n -P

Un resultado vacío significa que el puerto está libre y tu app arrancará.

Los culpables habituales

La mayoría de los errores de “puerto en uso” se reducen a una lista corta de sospechosos de siempre:

Un detalle propio de macOS: los puertos 5000 y 7000 suelen estar ocupados por AirPlay Receiver, no por un programa que iniciaste tú. Si no encuentras tu proceso en el 5000, normalmente es por eso: desactiva AirPlay Receiver en Configuración del Sistema o simplemente usa otro puerto.

Encuéntralo y soluciónalo sin la terminal

Portie muestra cada puerto abierto en tu Mac y el proceso exacto que ocupa cada uno, en una tabla en vivo actualizada cada 3 segundos. Cuando te topas con “puerto en uso”, ves de un vistazo qué hay en el puerto y lo terminas con un clic, sin lsof ni copiar PIDs.

El monitoreo local es gratuito. El desbloqueo de $8.99 (pago único) agrega la terminación de procesos con un clic (elegante o forzada) y el escaneo remoto de puertos. Descarga Portie y resuelve las colisiones de puertos en segundos.

Prueba Portie gratis

Ve cada puerto abierto en tu Mac, qué app lo usa y cierra procesos desde la lista.

Descargar gratis