macos - saber - Encuentra(y elimina) el proceso de bloqueo del puerto 3000 en Mac
eliminar procesos innecesarios en mac (28)
¿Cómo encuentro procesos que escuchan / usan mis puertos TCP? Estoy en mac os x
A veces, después de un fallo o algún error, mi aplicación de rieles está bloqueando el puerto 3000. No puedo encontrarlo usando ps -ef ... ¿Cómo encuentro la estupidez y la mato brutalmente ...?
Al hacer
rails server
yo obtengo
Dirección ya en uso - bind (2) (Errno :: EADDRINUSE)
Actualización de 2014:
Para completar algunas de las respuestas a continuación: Después de ejecutar los comandos de eliminación, puede ser necesario eliminar el archivo pid rm ~/mypath/myrailsapp/tmp/pids/server.pid
Puedes probar
netstat
netstat -vanp tcp | grep 3000
Para macOS El Capitan y más reciente (o si su netstat no admite
-p
), uselsof
sudo lsof -i tcp:3000
Para uso Centos 7
netstat -vanp --tcp | grep 3000
Añadir a ~/.bash_profile
:
function killTcpListen () {
kill -QUIT $(sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}
Luego source ~/.bash_profile
y ejecuta
killTcpListen 8080
Aquí hay una función de bash auxiliar para eliminar múltiples procesos por nombre o puerto
fkill() {
for i in $@;do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n ''1!p'';
else ps aux|grep -i $i|grep -v grep;fi|awk ''{print $2}''|/
xargs -I@ sh -c ''kill -9 @&&printf "X %s->%s/n" $q @'';done
}
Uso:
$ fkill [process name] [process port]
Ejemplo:
$ fkill someapp :8080 node :3333 :9000
Debes probar este código usando el terminal:
$ killall -9 ruby
Debes probar esto, esta técnica es independiente del sistema operativo.
En el lado de la aplicación hay una carpeta llamada tmp, dentro de la cual hay otra carpeta llamada pids. Ese archivo contiene el archivo pid del servidor. Simplemente elimine ese archivo. El puerto se mata automáticamente.
Creo que esta es la manera fácil.
Ejecutar en línea de comando en OS-X El Captain:
kill -kill `lsof -t -i tcp:3000`
La opción tersa de lsof devuelve solo el PID.
En su .bash_profile
, cree un acceso directo para terminate
el proceso 3000:
terminate(){
lsof -P | grep '':3000'' | awk ''{print $2}'' | xargs kill -9
}
Luego, llame a $terminate
si está bloqueado.
Encontrar:
[sudo] lsof -i :3000
Matar:
kill -9 <PID>
Encuentra y mata:
Esta única línea de comando es fácil y funciona correctamente.
kill -9 $(lsof -ti tcp:3000)
Hice una pequeña función para esto, la agrego a tu archivo rc ( .bashrc
, .zshrc
o lo que sea)
function kill-by-port {
if [ "$1" != "" ]
then
kill -9 $(lsof -ni tcp:"$1" | awk ''FNR==2{print $2}'')
else
echo "Missing argument! Usage: kill-by-port $PORT"
fi
}
luego, simplemente puede escribir kill-by-port 3000
para matar su servidor de rieles (sustituyendo 3000 por cualquier puerto en el que se esté ejecutando)
si falla eso, siempre podría escribir kill -9 $(cat tmp/pids/server.pid)
desde el directorio raíz de los rieles
Intente usar Ctrl + C en lugar de Ctrl + Z para terminar la aplicación que se estaba ejecutando anteriormente.
De lo contrario, puede encontrar el proceso ejecutándose en el puerto 3000 ejecutando [sudo] lsof -i :3000
Luego mata el proceso kill -9 <PID>
Nada de arriba funcionó para mí. Cualquier otra persona con mi experiencia podría probar lo siguiente (funcionó para mí):
Correr:
lsof -i :3000 (where 3000 is your current port in use)
luego verifique el estado del PID reportado:
ps ax | grep <PID>
finalmente, "comience con ello":
kill -QUIT <PID>
Para ver los procesos que bloquean el puerto:
netstat -vanp tcp | grep 3000
Para matar los procesos bloqueando el puerto:
kill $(lsof -t -i :3000)
Paso 1: Encuentra el servidor que se está ejecutando: ps aux | grep puma
ps aux | grep puma
Paso 2: elimine los servidores Kill -9 [número de servidor]
Posibles formas de lograr esto:
parte superior
El comando superior es la forma tradicional de ver el uso de recursos de su sistema y ver los procesos que están ocupando la mayoría de los recursos del sistema. La parte superior muestra una lista de procesos, con los que utilizan la mayor cantidad de CPU en la parte superior.
PD
El comando ps enumera los procesos en ejecución. El siguiente comando enumera todos los procesos que se ejecutan en su sistema:
ps -A
También puede canalizar la salida a través de grep para buscar un proceso específico sin utilizar ningún otro comando. El siguiente comando buscaría el proceso de Firefox:
ps -A | grep firefox
La forma más común de pasar señales a un programa es con el comando kill.
kill PID_of_target_process
lsof
Lista de todos los archivos abiertos y los procesos que los abrieron.
lsof -i -P | grep -i "listen"
kill -9 PID
o
lsof -i tcp:3000
Puedes usar lsof -i:3000
.
Eso es "Lista de archivos abiertos". Esto le proporciona una lista de los procesos y los archivos y puertos que utilizan.
Si nada de lo anterior funciona intente:
lsof -n -i4TCP:3000
TL; DR:
lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
Si se encuentra en una situación en la que hay clientes y servidores que utilizan el puerto, por ejemplo:
$ lsof -i tcp:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 2043 benjiegillam 21u IPv4 0xb1b4330c68e5ad61 0t0 TCP localhost:3000->localhost:52557 (ESTABLISHED)
node 2043 benjiegillam 22u IPv4 0xb1b4330c8d393021 0t0 TCP localhost:3000->localhost:52344 (ESTABLISHED)
node 2043 benjiegillam 25u IPv4 0xb1b4330c8eaf16c1 0t0 TCP localhost:3000 (LISTEN)
Google 99004 benjiegillam 125u IPv4 0xb1b4330c8bb05021 0t0 TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google 99004 benjiegillam 216u IPv4 0xb1b4330c8e5ea6c1 0t0 TCP localhost:52344->localhost:3000 (ESTABLISHED)
entonces probablemente no quieras matar a los dos.
En esta situación, puede usar -sTCP:LISTEN
para mostrar solo el pid de los procesos que están escuchando. Combinando esto con el formato -t
terso puede matar automáticamente el proceso:
lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
También puede cambiar la configuración en el puerto del servidor (config / puma.rb) línea 12.
$ port ENV.fetch ("PORT") {3000}
a
$ port ENV.fetch ("PORT") {3001}
o cualquier puerto específico que estime conveniente. esto evita la necesidad de ir en una búsqueda del tesoro para los procesos. Siempre puedes reiniciar tu computadora. también cuando inicia el servidor en otro puerto, normalmente eliminará el primer servidor que haya abierto.
Una de las formas de finalizar un proceso en un puerto es usar la biblioteca de python: freeport ( https://pypi.python.org/pypi/freeport/0.1.9 ). Una vez instalado, simplemente:
# install freeport
pip install freeport
# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully
Una sola línea para extraer el PID del proceso utilizando el puerto 3000 y eliminarlo.
lsof -ti:3000 | xargs kill
El indicador -t elimina todo menos el PID de la salida de lsof, lo que facilita su eliminación.
Usando la herramienta github , puedes hacer esto:
$ fkill :3000
puedes realizar esto usando el nodo
instala el modulo usando
npm install freethenport -g
y en tu terminal
node freethenport 3000
puedes usar el comando
lsof -h
El uso de este comando para encontrar puerto es
-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
En tu caso entra
lsof -i :3000
Encuentra la conexión abierta
lsof -i -P | grep -i "escucha"
Matar por ID de proceso
kill -9 ''PID''
lsof -P | grep '':3000'' | awk ''{print $2}''
Esto le dará sólo el pid, probado en MacOS.