Respuestas:
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
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 echo
por sudo
para que el proceso sea realmente asesinado.
echo
porsudo
80
.
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 netstat
porque 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).
$ 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 grep
en 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 -l
con netstat
o con lsof
usar -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 lsof
usamos -P
para mostrar en :80
lugar de :http
hacer posible el grep. La -S 2
opción obliga lsof
a completar de manera oportuna.
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 netstat
y luego decidir manualmente si se ejecuta o no:
$ kill -KILL 1914
Tengo otro script llamado listopenports
que puede ser de interés.
Ya descubriste qué proceso matar: es el número de proceso 20570
y su binario tiene el nombre httpd
escrito al final de la línea de salida de netstat
. Puedes matarlo por número kill 20570
o por nombre, killall httpd
pero 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 httpd
y man httpd
debe 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 Center
inferior System
y 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-all
devuelve una lista de todos los servicios que service
conoce y puede manejar. Un acceso directo para un reinicio de un servicio (que es: detener e iniciar en ese orden) es service --full-restart SERVICE
la SERVICE
de ser el nombre del servicio, por ejemplo .: httpd
en el caso de Apache.
La mayoría de los programas que encuentra netstat
se pueden manejar de esa manera. Algunos no pueden y otros ni siquiera tienen una página de manual, pero son raros.
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
killall
sin explicación o advertencia.
-k
interruptor para matar todos los procesos de coincidencia y-i
para matar de forma interactiva (solicitándote cada uno).