Termina il processo in esecuzione sulla porta 80


14

Questo è il processo che voglio uccidere:

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

Risposte:


31

Esistono diversi modi per trovare quale processo in esecuzione utilizza una porta.

Usando il fusore fornirà i PID delle istanze multiple associate alla porta di ascolto.

sudo apt-get install psmisc
sudo fuser 80/tcp

80/tcp:               1858  1867  1868  1869  1871

Dopo averlo scoperto, puoi interrompere o terminare i processi.

Puoi anche trovare i PID e maggiori dettagli 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)  

Per limitare ai socket in ascolto sulla porta 80 (al contrario dei client che si connettono alla porta 80):

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

Per ucciderli automaticamente:

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

1
Vorrei sottolineare che il fusore ha anche lo -kswitch per uccidere tutti i processi di corrispondenza e -iper uccidere in modo interattivo (chiedendo a ciascuno di essi).
A. Wilcox,

7

Ecco un oneliner che mostra il comando da eseguire:

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

Sostituisci echocon sudoil processo per essere effettivamente ucciso.


Sostituire echopersudo
EliuX l'

Questa è la risposta perfetta che dobbiamo solo sostituire il nostro numero di porta 80.
Youssof H.

4

Tre opzioni per la messa in vendita di porte aperte sono offerti in jsh 's whatisonport:

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

fuser -v "${PORT}"/tcp

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

Preferisco netstatperché è veloce, conciso e può elencare le porte aperte da altri utenti. (Anche se avrà ancora bisogno dei privilegi di superutente / utente per elencare i nomi e i PID di tali processi.)

Uscite

$ 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)
...

L'uso di grepin due casi è di abbinare solo la porta sul lato locale e saltare le connessioni aperte a una porta remota 80. (Un'alternativa sarebbe usare -lcon netstato con lsofusare -sTCP:LISTEN, ma mi piacciono i greps sopra perché lo faranno cattura anche le connessioni in uscita da un determinato porto, che a volte possono essere di interesse)

Con lsofusiamo -Pper visualizzare :80invece di :httprendere possibile il grep. L' -S 2opzione obbliga lsofa completare in modo tempestivo.

Uccidere il processo

Supponendo di voler usare netstat, potremmo afferrare i PID in questo modo:

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

E potremmo anche passare quei PID a kill:

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

Tuttavia, c'è spesso un potenziale per falsi positivi quando si utilizza regexps, quindi consiglierei di guardare solo l'output iniziale di netstate decidere manualmente se eseguire o meno:

$ kill -KILL 1914

Guarda anche

Ho un altro script chiamato listopenportsche potrebbe essere di interesse.


3

Hai già scoperto quale processo uccidere: è il numero di processo 20570e il suo binario ha il nome httpdcome scritto alla fine della riga dell'output di netstat. Puoi ucciderlo per numero kill 20570o per nome, killall httpdma non consiglierei di farlo in questo modo.

Le porte inferiori a 1024 hanno un uso standard (normalmente), puoi cercare quelle e molte altre con less /etc/services. La voce per la porta 80 è anche commentata:

http            80/tcp          www             # WorldWideWeb HTTP

Quindi è molto probabilmente un server web. Il nome che hai è httpde man httpddovrebbe darti il ​​grande suggerimento che è il binario di Apache che si adatta. Apache è uno dei grandi protagonisti, ha alcuni comodi programmi di gestione disponibili ma non ne hai bisogno per una semplice azione di avvio / arresto.

Hai la menta? Con un desktop normale? Quindi guarda Control Centersotto Systeme fai clic Services. Devi essere amministratore per fare qualsiasi cosa lì. Scorri verso il basso fino a trovare qualcosa chiamato "webserver" (ho lighttpd invece di Apache e non so esattamente come sarebbe la voce di Apache) e deselezionala.

Se vuoi solo fermarlo, prova temporaneamente, nella console

sudo service stop httpd

e iniziare con sudo service start httpd. service --status-allrestituisce un elenco di tutti i servizi serviceconosciuti e in grado di gestire. Una scorciatoia per un riavvio di un servizio (che è: arrestare e avviare in questo ordine) è service --full-restart SERVICEcon SERVICEessendo il nome del servizio, ad esempio .: httpdin caso di Apache.

La maggior parte dei programmi che trovi con netstatpossono essere gestiti in questo modo. Alcuni non possono e alcuni non hanno nemmeno una pagina di manuale, ma quelli sono rari.


0

C'è un modo semplice per farlo. Prima controlla quale processo sta usando la porta 80 di netstat :

netstat -ntl | grep 80

Ora hai il nome del processo e termina il processo con il comando killall :

killall -9 process name

Quali sono i pericoli dell'utilizzo del comando "killall"?
Peter Mortensen,

2
-1 per killallsenza spiegazione o avviso.
Guntbert,

1
Ci sono molti problemi con killall. Oltre a poter mettere in ginocchio un sistema in caso di problemi, può anche uccidere istanze multiple di un processo che non è associato alla porta. Per finire, il problema più grande di killall è che se qualcuno in una scatola di Solaris tenta di usarlo, uccide tutti i processi in esecuzione.
Rui F Ribeiro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.