Puerto a la escucha
También: puertos abiertos, qué usa el puerto 3000
Respuesta rápida
Un puerto a la escucha es un puerto de red en el que un proceso espera conexiones entrantes, como un servidor web en el puerto 3000. Solo un proceso puede escuchar en un puerto y una dirección a la vez, y por eso ves errores como “address already in use”.
Los servidores de desarrollo, las bases de datos y algunas apps abren puertos a la escucha. Cuando inicias un servidor y falla porque el puerto está ocupado, hay otro proceso, a menudo una copia anterior del mismo servidor, que sigue escuchando ahí.
Monitor de Actividad puede mostrar los archivos y puertos abiertos de un proceso, pero la forma más rápida de saber qué proceso ocupa un puerto es el comando lsof en Terminal.
En esta página
- Cómo saber qué está usando un puerto
- Cómo liberar un puerto
- Cómo ver los puertos en Monitor de Actividad
- Cómo leer el resultado de lsof
- Cómo ver a qué proyecto pertenece un servidor de desarrollo
- Por qué el puerto está ocupado cuando no parece haber nada en marcha
- La columna “Puertos” de Monitor de Actividad no son puertos de red
Cómo saber qué está usando un puerto
Ejecuta lsof -nP -iTCP:3000 -sTCP:LISTEN en Terminal, cambiando 3000 por tu puerto. El resultado muestra el nombre del comando y su PID.
Para listar todos los puertos TCP a la escucha, ejecuta lsof -nP -iTCP -sTCP:LISTEN. Añade sudo delante para incluir los procesos de otros usuarios.
Cómo liberar un puerto
Si el proceso es un servidor que iniciaste tú, detenlo primero de la forma normal, por ejemplo con Control-C en el terminal donde se ejecuta. Si no, ejecuta kill <PID> con el PID que te dio lsof. Usa kill -9 <PID> solo si no termina.
Comprueba el nombre del proceso antes de detenerlo. Algunos puertos pertenecen a servicios de macOS, como el Receptor AirPlay, que escucha en los puertos 5000 y 7000 en las versiones recientes de macOS.
Cómo ver los puertos en Monitor de Actividad
Haz doble clic en un proceso y abre la pestaña “Archivos y puertos abiertos”. Lista los archivos y las conexiones de red que tiene abiertos el proceso.
Cómo leer el resultado de lsof
Cada línea es un socket abierto. Un servidor suele mostrar dos líneas, una para IPv4 y otra para IPv6, con el mismo PID.
- COMMAND es el nombre del proceso, recortado a 9 caracteres por omisión. Añade
+c 0para ver el nombre completo:lsof +c 0 -nP -iTCP -sTCP:LISTEN. - PID es el ID del proceso que le pasas a
killops. - USER es la cuenta que lo ejecuta. Los procesos de root suelen formar parte de macOS o de un servicio instalado.
- NAME muestra la dirección y el puerto.
*:3000significa que el servidor acepta conexiones en todas las interfaces de red.127.0.0.1:3000o[::1]:3000significa que solo puede conectarse este Mac.
Cómo ver a qué proyecto pertenece un servidor de desarrollo
El nombre del proceso suele ser solo node, python o ruby, que no te dice qué proyecto se está ejecutando. Dos comandos te lo aclaran.
- Obtén el PID con
lsof -nP -iTCP:3000 -sTCP:LISTEN. - Ejecuta
ps -o pid,ppid,command -p <PID>para ver el comando completo que lo inició. - Ejecuta
lsof -a -p <PID> -d cwdpara ver la carpeta en la que se ejecuta, que suele ser la carpeta del proyecto. - Si el PPID apunta a un shell, el servidor se inició desde una ventana de terminal. Detenlo ahí con Control-C si esa ventana sigue abierta.
Por qué el puerto está ocupado cuando no parece haber nada en marcha
Si el puerto es del Receptor AirPlay, ejecuta tu servidor en otro puerto o desactiva el Receptor AirPlay en Ajustes del Sistema > General, en la sección AirDrop.
- Un servidor de una sesión anterior sigue en marcha en una pestaña o ventana de terminal que olvidaste.
- Un servidor se inició en segundo plano, o desde un editor u otra herramienta, y no tiene ninguna ventana visible.
- El servidor se cerró inesperadamente, pero un proceso secundario que inició sigue ocupando el puerto.
- Un servicio de macOS usa el mismo puerto, como el Receptor AirPlay en los puertos 5000 y 7000.
La columna “Puertos” de Monitor de Actividad no son puertos de red
Monitor de Actividad tiene una columna opcional “Puertos” en la pestaña CPU. Cuenta los puertos Mach, un mecanismo de mensajes que macOS usa entre procesos, la misma cifra que top muestra como puertos. No lista los puertos de red. Para los puertos de red, usa lsof o la pestaña “Archivos y puertos abiertos” de la ventana de información de un proceso.
Preguntas frecuentes
¿Cómo veo qué está usando el puerto 3000 en un Mac?
Ejecuta lsof -nP -iTCP:3000 -sTCP:LISTEN en Terminal. Muestra el nombre y el PID del proceso que escucha en ese puerto.
¿Cómo mato el proceso que ocupa un puerto en un Mac?
Busca su PID con lsof y luego ejecuta kill <PID>. Si no termina, kill -9 <PID> lo cierra al instante.
¿Cómo veo todos los puertos abiertos en un Mac?
Ejecuta lsof -nP -iTCP -sTCP:LISTEN para listar los puertos TCP a la escucha. Añade sudo para incluir los procesos de otros usuarios.
¿Qué significa “address already in use”?
Hay otro proceso escuchando ya en ese puerto y esa dirección. Encuéntralo con lsof -nP -iTCP:<port> -sTCP:LISTEN y luego detenlo o elige otro puerto.
¿Por qué lsof no muestra nada para un puerto que está en uso?
Puede que el proceso sea de otro usuario o de root. Ejecuta el mismo comando con sudo delante para incluir todos los procesos.
¿Es seguro matar lo que haya en el puerto 5000 o 7000?
No sin mirar antes el nombre. En las versiones recientes de macOS, esos puertos suele usarlos el Receptor AirPlay, que puedes desactivar en Ajustes del Sistema.
Relacionado
Paso a paso: Docker usa demasiada memoria.
¿Buscas algo mejor que Monitor de Actividad? Consulta las mejores alternativas a Monitor de Actividad para Mac, o explora todos los términos del glosario.