¿Cómo cierro un puerto abierto desde el terminal en la Mac?
197
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?
Enviar -9 no debería ser el primer intento de matar un proceso, y es un mal hábito. Como recuerdo, primero debes usar kill PID(lo que implica -15), luego probar -2 y -1. -9 es el último recurso sólo si cada otras opciones no funcionó.
Miau
3
mató pID sin ninguna bandera como lo sugirió @Meow y esto funcionó para mí
Toni Leigh
39
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 ifconfigcomando.
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.
Salvaste mi día. Por alguna razón, lsofen combinación con killno devolvió nada e hizo que mi script se bloqueara en macOS Sierra. Pero killportfunciona de maravilla y es más rápido. ¡Gracias!
Wout
4
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.
Cuando el programa que abrió el puerto se cierra, el puerto se cerrará automáticamente. Si elimina el proceso Java que ejecuta este servidor, eso debería hacerlo.
Respuestas:
Descubra el ID de proceso (PID) que ocupa el número de puerto (por ejemplo, 5955) que desea liberar
Elimine el proceso que actualmente utiliza el puerto utilizando su PID
fuente
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:
Elimine el proceso que actualmente utiliza el puerto utilizando su PID
y luego verifique si el puerto se cerró. Si no, intente:
Solo haría lo siguiente si el anterior no funcionara
Solo para estar seguros. De nuevo, dependiendo de cómo abrió el puerto, esto puede no importar.
fuente
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:
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:
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.fuente
muy simple encontrar el puerto 5900:
luego considerando 59553 como PID
fuente
En 2018, esto es lo que funcionó para mí usando MacOS HighSierra:
sudo lsof -nPi: yourPortNumber
luego:
sudo kill -9 yourPIDnumber
fuente
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
Un trazador de líneas es el mejor
Ejemplo: en Mac, quería borrar el puerto 9604. El siguiente comando funcionó de maravilla
fuente
También puede usar este primer comando para matar un proceso que posee un puerto en particular:
Por ejemplo, supongamos que este proceso contiene el puerto 8000 TCP y luego ejecuta el comando:
mostrará la línea correspondiente al proceso que contiene el puerto 8000 , por ejemplo:
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:
Como otros mencionaron aquí, si eso no funciona (puede intentar usar kill con -9 como argumento):
Nuevamente, en general, es mejor evitar enviar SIGKILL (-9) si puedes.
Salud,
Chico.
fuente
Yo uso
lsof
combinado conkill
, 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 puerto3000
.https://github.com/xtrasimplicity/killport
fuente
lsof
en combinación conkill
no devolvió nada e hizo que mi script se bloqueara en macOS Sierra. Perokillport
funciona de maravilla y es más rápido. ¡Gracias!He creado una función para este propósito.
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.
fuente
intente a continuación, suponiendo que el puerto en ejecución es
8000
:Encontré la referencia aquí
fuente
Cuando el programa que abrió el puerto se cierra, el puerto se cerrará automáticamente. Si elimina el proceso Java que ejecuta este servidor, eso debería hacerlo.
fuente
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
fuente