Encuentre (y elimine) el proceso de bloqueo del puerto 3000 en Mac [cerrado]
¿Cómo encuentro (y elimino) procesos que escuchan/utilizan mis puertos TCP? Estoy en macOS.
A veces, después de un bloqueo o algún error, mi aplicación Rails bloquea el puerto 3000. No puedo encontrarlo usando ps -ef
...
al correr
rails server
yo obtengo
Address already in use - bind(2) (Errno::EADDRINUSE)
El mismo problema ocurre al detener el proceso de Node.js. Incluso después de que se detiene el proceso y la aplicación deja de ejecutarse, el puerto 3000
está bloqueado. Al iniciar la aplicación nuevamente, obtener
Address already in use (Errno::EADDRINUSE)
Puedes probar
netstat
netstat -vanp tcp | grep 3000
Para macOS El Capitan y versiones posteriores (o si su netstat no es compatible
-p
), uselsof
lsof -i tcp:3000
Encontrar:
sudo lsof -i :3000
Matar:
kill -9 <PID>
TENGA EN CUENTA: -9
finaliza el proceso inmediatamente y no le da ninguna posibilidad de limpiarse. Esto puede causar problemas. Considere usar -15
(TERM) o -3
(QUIT) para una terminación más suave que permita que el proceso se limpie por sí solo.
Solución rápida y sencilla :
kill -9 $(lsof -ti:3000)
Para múltiples puertos:
kill -9 $(lsof -ti:3000,3001)
#3000 es el puerto a liberar
Elimine varios puertos con un comando de una sola línea:
kill -9 $(lsof -ti:3000,3001)
#Aquí varios puertos 3000 y 3001 son los puertos que se liberarán
lsof -ti:3000
Si el puerto está ocupado, el comando anterior devolverá algo como esto: 82500 (ID de proceso)
lsof -ti:3001
82499
lsof -ti:3001,3000
82499 82500
matar -9 $(lsof -ti:3001,3000)
Finaliza los procesos 82499 y 82500 con un solo comando.
Para usar esto en package.json
scripts:
"scripts": {
"start": "kill -9 $(lsof -ti:3000,3001) && npm start"
}
En la terminal puedes usar:
npm run start