Abrí el puerto # 5955 de una clase de Java para comunicarme desde un cliente. ¿Cómo cierro este puerto después de haber terminado? y también qué comando me puede mostrar si el puerto está abierto o cerrado?
Abrí el puerto # 5955 de una clase de Java para comunicarme desde un cliente. ¿Cómo cierro este puerto después de haber terminado? y también qué comando me puede mostrar si el puerto está abierto o cerrado?
Respuestas:
Descubra el ID de proceso (PID) que ocupa el número de puerto (por ejemplo, 5955) que desea liberar
sudo lsof -i :5955
Elimine el proceso que actualmente utiliza el puerto utilizando su PID
sudo kill -9 PID
kill PID
(lo que implica -15), luego probar -2 y -1. -9 es el último recurso sólo si cada otras opciones no funcionó.
Para encontrar el proceso, intente:
sudo lsof -i :portNumber
Elimine el proceso que actualmente utiliza el puerto utilizando su PID
kill PID
y luego verifique si el puerto se cerró. Si no, intente:
kill -9 PID
Solo haría lo siguiente si el anterior no funcionara
sudo kill -9 PID
Solo para estar seguros. De nuevo, dependiendo de cómo abrió el puerto, esto puede no importar.
Sin embargo, abrió el puerto, lo cierra de la misma manera. Por ejemplo, si creó un socket, lo vinculó al puerto 0.0.0.0:5955 y llamó a listen, cierre ese mismo socket.
También puede simplemente matar el proceso que tiene el puerto abierto.
Si desea averiguar qué proceso tiene un puerto abierto, intente esto:
lsof -i :5955
Si desea saber si un puerto está abierto, puede hacer el mismo comando lsof (si algún proceso lo tiene abierto, está abierto; de lo contrario, no lo está), o puede intentar conectarse a él, por ejemplo:
nc localhost 5955
Si vuelve inmediatamente sin salida, el puerto no está abierto.
Vale la pena mencionar que, técnicamente hablando, no es un puerto abierto, sino una combinación host: puerto. Por ejemplo, si está conectado a una LAN como 10.0.1.2, podría vincular un socket a 127.0.0.1:5955 o 10.0.1.2:5955, sin que ninguno afecte al otro, o podría vincular a 0.0.0.0 : 5955 para manejar ambos a la vez. Puede ver todas las direcciones IPv4 e IPv6 de su computadora con el ifconfig
comando.
En 2018, esto es lo que funcionó para mí usando MacOS HighSierra:
sudo lsof -nPi: yourPortNumber
luego:
sudo kill -9 yourPIDnumber
lsof -nPi
es un poco mejor porque el número de puerto es realmente visible en la salida y tienes una mejor idea de lo que estás matando.
sudo lsof -nPi | grep LISTEN
También puede usar este primer comando para matar un proceso que posee un puerto en particular:
sudo netstat -ap | grep :<port_number>
Por ejemplo, supongamos que este proceso contiene el puerto 8000 TCP y luego ejecuta el comando:
sudo netstat -ap | grep :8000
mostrará la línea correspondiente al proceso que contiene el puerto 8000 , por ejemplo:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
En este caso, procHoldingPort es el nombre del proceso que abrió el puerto, 4683 es su pid y 8000 (tenga en cuenta que es TCP) es el número de puerto que contiene (que desea cerrar).
Luego elimine el proceso, siguiendo el ejemplo anterior:
kill 4683
Como otros mencionaron aquí, si eso no funciona (puede intentar usar kill con -9 como argumento):
kill -9 4683
Nuevamente, en general, es mejor evitar enviar SIGKILL (-9) si puedes.
Salud,
Chico.
Yo uso lsof
combinado con kill
, como se mencionó anteriormente; pero escribió un pequeño script bash rápido para automatizar este proceso.
Con este script, simplemente puede escribir killport 3000
desde cualquier lugar y eliminará todos los procesos que se ejecutan en el puerto 3000
.
lsof
en combinación con kill
no devolvió nada e hizo que mi script se bloqueara en macOS Sierra. Pero killport
funciona de maravilla y es más rápido. ¡Gracias!
He creado una función para este propósito.
function free_port() {
if [ -z $1 ]
then
echo no Port given
else
PORT=$1;
PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port
if [ -z $PID ]
then
echo port: $PORT is already free.
else
sudo kill -9 $PID # kill the process, which frees the port
echo port: $PORT is now free.
fi
fi
}
free_port 80 # you need to change this port number
Copiar y pegar este bloque de código en su terminal debería liberar su puerto deseado. Solo recuerde cambiar el número de puerto en la última línea.
intente a continuación, suponiendo que el puerto en ejecución es 8000
:
free-port() { kill "$(lsof -t -i :8000)"; }
Encontré la referencia aquí
Primero descubra la identificación de Procees (pid) que ha ocupado el puerto requerido (por ejemplo, 5434)
ps aux | grep 5434
2. matar ese proceso
kill -9 <pid>