Kill processo em execução na porta 80

9

Este é o processo que quero matar:

sooorajjj@Treako ~/Desktop/MerkMod $ sudo netstat -tunap | grep :80
tcp6    0   0 :::80   :::*     LISTEN    20570/httpd
    
por Sooraj S 21.11.2015 / 08:48

5 respostas

25

Existem várias maneiras de descobrir qual processo de execução está usando uma porta.

Usando o fusor, ele fornecerá 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
    
por 21.11.2015 / 09:17
6

Aqui está um oneliner que faz isso:

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

Substitua echo por sudo para o processo ser eliminado.

    
por 21.11.2015 / 12:11
4

Três opções para listar portas abertas são oferecidas em 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.)

Saídas

$ 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 ignorar conexões abertas para uma porta remota 80. (Uma alternativa seria usar -l com netstat ou com lsof para usar -sTCP:LISTEN , mas eu gosto dos greps acima porque eles também irão capturar conexões da porta, o que ocasionalmente pode ser de interesse. / p>

Com lsof , usamos -P para exibir :80 em vez de :http para tornar o grep possível. A opção -S 2 força lsof a concluir de maneira oportuna.

Matando o processo

Supondo que queremos usar netstat , podemos pegar os PIDs assim:

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

E poderíamos até passar esses PIDs para kill :

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

No entanto, muitas vezes há um potencial para falso positivo ao usar regexps, então eu recomendaria apenas olhar para a saída inicial de netstat e, em seguida, decidir manualmente se deve ou não executar:

$ kill -KILL 1914

Veja também

Eu tenho outro script chamado listopenports que pode ser de interesse.

    
por 22.11.2015 / 06:38
3

Você já descobriu qual processo matar: o número do processo 20570 e seu binário tem o nome httpd como escrito no final da linha da saída de netstat . Você pode matá-lo pelo número kill 20570 ou pelo nome killall httpd , mas eu não recomendaria fazê-lo dessa maneira.

Portas menores que 1024 têm um uso padronizado (normalmente), você pode procurar essas e muitas outras com less /etc/services . A entrada para a porta 80 é mesmo comentada:

http            80/tcp          www             # WorldWideWeb HTTP

Então, é mais provável que seja um servidor web. O nome que você tem é httpd e man httpd deve dar a você a grande dica de que é o binário do Apache que se encaixa. O Apache é um dos grandes players, tem alguns programas de gerenciamento confortáveis disponíveis, mas você não precisa deles para uma mera ação de iniciar / parar.

Você tem hortelã? Com um desktop normal? Em seguida, procure no Control Center em System e clique em Services . Você precisa ser admin para fazer qualquer coisa lá. Role para baixo até encontrar algo com o rótulo "webserver" (eu tenho o lighttpd em vez do Apache e não sei exatamente como a entrada do Apache se pareceria) e desmarque-o.

Se você quiser apenas pará-lo 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 a reinicialização de um serviço (ou seja: parar e iniciá-lo nessa ordem) é service --full-restart SERVICE , com SERVICE sendo o nome do serviço, por exemplo: httpd no caso do Apache.

A maioria dos programas que você encontra com netstat pode ser manipulada dessa maneira. Alguns não podem e alguns nem sequer têm uma página do homem, mas são raros.

    
por 21.11.2015 / 17:55
0

Existe uma maneira simples de fazer isso. Primeiro verifique qual processo está usando a porta 80 por netstat :

netstat -ntl | grep 80

Agora você tem o nome do processo e elimina o processo com o comando killall :

killall -9 process name

    
por 21.11.2015 / 10:41

Tags