¿Liberando un puerto TCP / IP?


Respuestas:


214

Como han dicho los demás, deberá eliminar todos los procesos que escuchan en ese puerto. La forma más fácil de hacerlo sería utilizar el comando fuser (1). Por ejemplo, para ver todos los procesos escuchando las solicitudes http en el puerto 80 (ejecutar como root o usar sudo):

# fuser 80/tcp

Si quieres matarlos, simplemente agrega la opción -k.


1
Descubrí que enviar una solicitud al puerto también lo limpia (aunque no soy un experto en Linux)
Matej

1
Para instalar el fusor en Debian: sudo apt-get install psmisc ( bitflop.com/document/107 )
Korneel

1
Funcionó, pero también tuve que instalar psmisc en CentOs 7 ( sudo yum install psmisc)
Marlon Bernardes

1
kill -9 $(fuser 80/tcp 2>/dev/null)
Hanynowsky

76

Para matar un puerto específico en Linux, use el siguiente comando

sudo fuser -k Port_Number/tcp

reemplace Port_Number con su puerto ocupado.


66
Esto realmente mata el proceso que abrió el puerto y no el puerto en sí.
vinayc

16

Puede usar tcpkill(parte del dsniffpaquete) para eliminar la conexión que está en el puerto que necesita:

sudo tcpkill -9 port PORT_NUMBER

11
esto simplemente se cuelga$ sudo tcpkill -9 port 5432 tcpkill: listening on lxcbr0 [port 5432]
Anentropic

16

En tipo de terminal:

netstat -anp|grep "port_number"

Mostrará los detalles del puerto. Ir a la última columna. Estará en este formato. Por ejemplo: - PID / java

luego ejecuta:

kill -9 PID. Worked on Centos5

Para Mac:

lsof -n -i :'port-number' | grep LISTEN

Respuesta de muestra:

java   4744 (PID)  test  364u  IP0 asdasdasda   0t0  TCP *:port-number (LISTEN)

y luego ejecuta:

kill -9 PID 

Trabajó en Macbook


obviamente esto no funciona si la columna PID está vacía para ese puerto
Anentropic

1
... y eso sucede si no tiene permiso para ver el proceso ... intente sudo netstatver los PID :)
Anentropic

Intenté matar un puerto en una instancia de Amazon ec2 a través de putty cli. Forever dijo que no tenía procesos en ejecución pero que el puerto (4200 para una aplicación angular) todavía estaba abierto. Este es el único comando que funcionó para mí.
vtechmonkey

9

El "netstat --programs"comando le dará la información del proceso, suponiendo que sea root. Entonces tendrás que matar el proceso "ofensivo" que bien puede comenzar de nuevo solo para molestarte :-).

¿Qué estás tratando de lograr aquí? Las soluciones variarán según los procesos que contengan esos puertos.


8

Para verificar todos los puertos:

netstat -lnp

Para cerrar un puerto abierto:

fuser -k port_no/tcp

Ejemplo:

fuser -k 8080/tcp

En ambos casos, puede usar el sudocomando si es necesario.


7

Elimine el proceso que está escuchando el puerto en cuestión. Creo que netstat te muestra los identificadores de proceso.


3
netstat -anp | grep <port> la última columna tiene el proceso
user1747935

2

Si realmente quiere matar un proceso de inmediato, le envía una señal de KILL en lugar de una señal de TERM (esta última una solicitud de detención, la primera entrará en vigencia inmediatamente sin ninguna limpieza). Es fácil de hacer:

kill -KILL <pid>

Sin embargo, tenga en cuenta que dependiendo del programa que esté deteniendo, su estado puede corromperse gravemente al hacerlo. Normalmente solo desea enviar una señal KILL cuando la terminación normal no funciona. Me pregunto cuál es el problema subyacente que intentas resolver y si matar es la solución correcta.


0

Creo que la única forma será detener el proceso que ha abierto el puerto.



-14

Apagar la computadora siempre mata el proceso para mí.


apagar una máquina servidor es raro.
waqas

24
¿Recibiste tu insignia "más divertida"?
jplandrain

No es necesario apagar su computadora.
Anil Chahal

La mejor idea de la historia 10/10
Valentin Roudge

11
a diferencia de algunas de las otras respuestas, esto seguramente funcionará
Anentropic
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.