Proceso de eliminación que se ejecuta en el puerto 80


14

Este es el proceso que quiero matar:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd

Respuestas:


31

Hay varias formas de encontrar qué proceso en ejecución está utilizando un puerto.

Al usar el fusor, proporcionará los PID de las múltiples instancias asociadas con el puerto de escucha.

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

Después de descubrirlo, puede detener o eliminar los procesos.

También puede encontrar los PID y más detalles usando lsof

sudo lsof -i tcp:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
nginx   1858     root    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1867 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1868 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1869 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  
nginx   1871 www-data    6u  IPv4   5043      0t0  TCP ruir.mxxx.com:http (LISTEN)  

Para limitar a los sockets que escuchan en el puerto 80 (a diferencia de los clientes que se conectan al puerto 80):

sudo lsof -i tcp:80 -s tcp:listen

Para matarlos automáticamente:

sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill

1
Me gustaría señalar que el fusor también tiene el -kinterruptor para matar todos los procesos de coincidencia y -ipara matar de forma interactiva (solicitándote cada uno).
A. Wilcox

7

Aquí hay una línea que muestra el comando a ejecutar:

echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')

Reemplace echopor sudopara que el proceso sea realmente asesinado.


Reemplazar echoporsudo
EliuX

Esta es la respuesta perfecta con la que solo tenemos que reemplazar nuestro número de puerto 80.
Youssof H.

4

Tres opciones para la inclusión de los puertos abiertos se ofrecen en jsh 's whatisonport:

netstat -anp --numeric-ports | grep ":${PORT}\>.*:" 

fuser -v "${PORT}"/tcp

lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"

Lo prefiero netstatporque es rápido, conciso y puede enumerar puertos abiertos por otros usuarios. (Aunque todavía necesitará privilegios de superusuario / usuario para enumerar los nombres y los PID de dichos procesos).

Salidas

$ netstat -anp --numeric-ports | grep ":80\>.*:" 
tcp6       0      0 :::80           :::*            LISTEN      1914/apache2    

$ fuser -v "80/tcp"
                     USER        PID ACCESS COMMAND
80/tcp:              root       1914 F.... apache2
                     www-data  12418 F.... apache2
...

$ lsof -P -S 2 -i "tcp:80" | grep "\(:80->.*:\|:80 (LISTEN)$\)"
apache2  1914     root    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
apache2 12418 www-data    4u  IPv6   11920      0t0  TCP *:80 (LISTEN)
...

El uso de grepen dos casos es hacer coincidir solo el puerto en el lado local y omitir las conexiones abiertas a un puerto remoto 80. (Una alternativa sería usar -lcon netstato con lsofusar -sTCP:LISTEN, pero me gustan los greps anteriores porque lo harán también captura conexiones salientes desde el puerto dado, lo que ocasionalmente puede ser de interés).

Con lsofusamos -Ppara mostrar en :80lugar de :httphacer posible el grep. La -S 2opción obliga lsofa completar de manera oportuna.

Matando el proceso

Suponiendo que queremos usar netstat, podríamos tomar los PID de esta manera:

$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...

E incluso podríamos pasar esos PID a kill:

... | xargs -d '\n' kill -KILL

Sin embargo, a menudo existe la posibilidad de falsos positivos cuando se utilizan expresiones regulares, por lo que recomendaría simplemente mirar la salida inicial de netstaty luego decidir manualmente si se ejecuta o no:

$ kill -KILL 1914

Ver también

Tengo otro script llamado listopenportsque puede ser de interés.


3

Ya descubriste qué proceso matar: es el número de proceso 20570y su binario tiene el nombre httpdescrito al final de la línea de salida de netstat. Puedes matarlo por número kill 20570o por nombre, killall httpdpero no recomendaría hacerlo de esa manera.

Los puertos inferiores a 1024 tienen un uso estandarizado (normalmente), puede buscarlos con muchos otros less /etc/services. La entrada para el puerto 80 incluso se comenta:

http            80/tcp          www             # WorldWideWeb HTTP

Por lo tanto, es muy probable que sea un servidor web. El nombre que tiene es httpdy man httpddebe darle la gran pista de que es el binario de Apache el que se ajusta. Apache es uno de los grandes actores, tiene algunos programas de administración cómodos disponibles, pero no los necesita para una simple acción de inicio / detención.

Tienes menta? Con un escritorio normal? Luego mira en la parte Control Centerinferior Systemy haz clic Services. Debes ser administrador para hacer cualquier cosa allí. Desplácese hacia abajo hasta que encuentre algo etiquetado como "servidor web" (tengo lighttpd en lugar de Apache y no sé exactamente cómo se vería la entrada de Apache) y desactívela.

Si solo quieres detenerlo temporalmente, prueba en la consola

sudo service stop httpd

y comenzar con sudo service start httpd. service --status-alldevuelve una lista de todos los servicios que serviceconoce y puede manejar. Un acceso directo para un reinicio de un servicio (que es: detener e iniciar en ese orden) es service --full-restart SERVICEla SERVICEde ser el nombre del servicio, por ejemplo .: httpden el caso de Apache.

La mayoría de los programas que encuentra netstatse pueden manejar de esa manera. Algunos no pueden y otros ni siquiera tienen una página de manual, pero son raros.


0

Hay una manera simple de hacer esto. Primero verifique qué proceso está usando el puerto 80 de netstat :

netstat -ntl | grep 80

Ahora tiene el nombre del proceso y elimine el proceso con el comando killall :

killall -9 process name

¿Cuáles son los peligros de usar el comando 'killall'?
Peter Mortensen

2
-1 para killallsin explicación o advertencia.
guntbert

1
Hay varios problemas con killall. Además de poder poner de rodillas un sistema en caso de problema, también puede matar múltiples instancias de un proceso que no está asociado con el puerto. Para colmo, el mayor problema de killall es que si alguien en un cuadro de Solaris intenta usarlo, mata todos los procesos en ejecución.
Rui F Ribeiro
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.