Cómo matar un proceso por número de puerto en Mac
¿Necesitas liberar un puerto rápido? Aquí verás cómo encontrar el proceso que ocupa cualquier puerto y eliminarlo desde Terminal, más un comando directo que hace los dos pasos a la vez.
Quieres el puerto 8080 libre. No importa qué lo está usando. Simplemente necesitas que desaparezca. macOS te da las herramientas para hacerlo en un solo comando de Terminal, una vez que conoces las opciones correctas.
Primero, encuentra el proceso
lsof te dice qué proceso tiene un puerto abierto. La opción -i filtra por socket de red, y :PUERTO lo acota a un número de puerto específico:
lsof -i :8080
Salida de ejemplo:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 4821 aaron 42u IPv6 0x... 0t0 TCP *:http-alt (LISTEN)
La columna PID es lo que necesitas. En este caso es 4821.
Mátalo
kill -9 4821
La opción -9 envía SIGKILL, que obliga al proceso a terminar de inmediato. El proceso no puede capturar ni ignorar esta señal. El sistema operativo lo termina y libera el puerto.
Comando directo: busca y mata en un solo paso
Si solo quieres liberar el puerto sin necesidad de inspeccionar el proceso primero, puedes hacer los dos pasos a la vez:
kill -9 $(lsof -ti :8080)
La opción -t hace que lsof devuelva solo el PID: sin encabezados ni columnas extra. Eso lo hace seguro para sustituirlo directamente en kill.
SIGTERM vs SIGKILL
La opción -9 no siempre es la elección correcta. Hay dos señales habituales:
- SIGTERM (señal 15): le pide al proceso que termine de forma ordenada. El proceso puede capturar esta señal y hacer limpieza (guardar escrituras pendientes, cerrar conexiones de base de datos, guardar el estado) antes de salir. Se usa con
kill 4821sin ninguna opción. - SIGKILL (señal 9): obliga al proceso a terminar de inmediato. Sin limpieza, sin aviso. Se usa con
kill -9 4821.
Para un servidor de desarrollo atascado que bloquea tu puerto, SIGKILL está bien. Para una base de datos o cualquier proceso que esté escribiendo en disco, prueba primero con SIGTERM y dale unos segundos. Si no termina, entonces usa SIGKILL.
Cuando el puerto tiene varios procesos
A veces lsof devuelve más de un PID. Esto ocurre cuando un proceso padre bifurca procesos de trabajo que comparten el mismo socket:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1100 root 6u IPv4 ... 0t0 TCP *:80 (LISTEN)
nginx 1101 aaron 6u IPv4 ... 0t0 TCP *:80 (LISTEN)
nginx 1102 aaron 6u IPv4 ... 0t0 TCP *:80 (LISTEN)
Para terminarlos todos a la vez:
kill -9 $(lsof -ti :80)
Como -t devuelve cada PID en su propia línea, el shell los pasa todos a kill como argumentos separados. Los tres procesos se terminan.
Protégete del PID equivocado
Un error tipográfico o un número de puerto incorrecto puede matar el proceso equivocado. Antes de ejecutar un comando kill en un sistema compartido o de producción, confirma que el nombre del proceso en la salida de lsof coincide con lo que esperas.
Si la columna COMMAND muestra algo como postgres, redis-server u otro servidor de base de datos, y tú esperabas un servidor de desarrollo Node.js, para y revisa. Matar una base de datos mientras está escribiendo puede corromper los datos.
Usando Portie
Portie muestra todos los puertos abiertos de tu Mac en una lista en vivo, actualizada cada 3 segundos. Puedes ver el nombre del proceso y el PID de cada puerto de un vistazo. Sin tener que recordar opciones.
El nivel gratuito incluye el monitoreo local. El desbloqueo por $8.99 de pago único agrega la posibilidad de matar un proceso directamente desde la lista con un solo clic. Eliges SIGTERM o SIGKILL desde un menú. Sin Terminal.