Respostas:
Existem várias maneiras de descobrir qual processo em execução está usando uma porta.
Usando o fusor, ele fornece o (s) PID (s) das várias instâncias associadas à porta de escuta.
sudo apt-get install psmisc
sudo fuser 80/tcp
80/tcp: 1858 1867 1868 1869 1871
Depois de descobrir, você pode parar ou matar o (s) processo (s).
Você também pode encontrar os PIDs e mais detalhes 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 os soquetes que escutam na porta 80 (em oposição aos clientes que se conectam à porta 80):
sudo lsof -i tcp:80 -s tcp:listen
Para matá-los automaticamente:
sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill
Aqui está um oneliner que mostra o comando a ser executado:
echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')
Substitua echo
por sudo
para que o processo realmente seja eliminado.
echo
porsudo
80
.
Três opções para listar portas abertas são oferecidas no jsh 's whatisonport
:
netstat -anp --numeric-ports | grep ":${PORT}\>.*:"
fuser -v "${PORT}"/tcp
lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"
Eu prefiro netstat
porque é rápido, conciso e pode listar portas abertas por outros usuários. (Embora ainda seja necessário privilégios de superusuário / usuário para listar os nomes e PIDs de tais processos.)
$ 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)
...
O uso de grep
em dois casos é corresponder apenas à porta no lado local e pular conexões abertas para uma porta remota 80. (Uma alternativa seria usar -l
com netstat
ou com lsof
usar -sTCP:LISTEN
, mas eu gosto dos greps acima porque eles também capturam conexões de saída da porta fornecida, o que pode ocasionalmente ser interessante.)
Com lsof
usamos -P
para exibir em :80
vez de :http
tornar possível o grep. A -S 2
opção obriga lsof
a ser concluída em tempo hábil.
Supondo que desejamos usar netstat
, poderíamos pegar os PIDs assim:
$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...
E podemos até passar esses PIDs para kill
:
... | xargs -d '\n' kill -KILL
No entanto, geralmente há um potencial de falso positivo ao usar regexps, portanto, recomendo apenas examinar a saída inicial netstat
e decidir manualmente se deseja executar:
$ kill -KILL 1914
Eu tenho outro script chamado listopenports
que pode ser do seu interesse.
Você já descobriu qual processo matar: é o número do processo 20570
e seu binário possui o nome httpd
conforme escrito no final da linha de saída de netstat
. Você pode matá-lo por número kill 20570
ou nome, killall httpd
mas eu não recomendaria fazê-lo dessa maneira.
Portas inferiores a 1024 têm um uso padronizado (normalmente), você pode procurar essas e muitas outras less /etc/services
. A entrada para a porta 80 é até comentada:
http 80/tcp www # WorldWideWeb HTTP
Portanto, é provavelmente um servidor da web. O nome que você tem é httpd
e man httpd
deve lhe dar a grande dica de que é o binário Apache que se encaixa. O Apache é um dos grandes players, possui alguns programas de gerenciamento confortáveis disponíveis, mas você não precisa deles para uma simples ação de iniciar / parar.
Você tem hortelã? Com uma área de trabalho normal? Então, olhe Control Center
abaixo System
e clique Services
. Você precisa ser administrador para fazer qualquer coisa lá. Role para baixo até encontrar algo rotulado como "servidor da web" (eu tenho o lighttpd em vez do Apache e não sei exatamente como seria a entrada do Apache) e desmarque-o.
Se você quiser apenas parar temporariamente, tente, no console
sudo service stop httpd
e comece com sudo service start httpd
. service --status-all
retorna uma lista de todos os serviços que service
conhece e pode manipular. Um atalho para um reinício de um serviço (isto é: parar e iniciá-lo nessa ordem) é service --full-restart SERVICE
com SERVICE
sendo o nome do serviço, por exemplo .: httpd
em caso de Apache.
A maioria dos programas encontrados netstat
pode ser tratada dessa maneira. Alguns não podem e outros nem sequer têm uma página de manual, mas são raros.
Existe uma maneira simples de fazer isso. Primeiro verifique qual processo está usando a porta 80 pelo netstat :
netstat -ntl | grep 80
Agora você tem o nome do processo e matar o processo com o killall comando:
killall -9 process name
killall
sem explicação ou aviso.
-k
opção de eliminar todos os processos correspondentes e-i
matar de forma interativa (solicitando cada um deles).