Risposte:
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
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 echo
con sudo
il processo per essere effettivamente ucciso.
echo
persudo
80
.
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 netstat
perché è 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.)
$ 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 grep
in due casi è di abbinare solo la porta sul lato locale e saltare le connessioni aperte a una porta remota 80. (Un'alternativa sarebbe usare -l
con netstat
o con lsof
usare -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 lsof
usiamo -P
per visualizzare :80
invece di :http
rendere possibile il grep. L' -S 2
opzione obbliga lsof
a completare in modo tempestivo.
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 netstat
e decidere manualmente se eseguire o meno:
$ kill -KILL 1914
Ho un altro script chiamato listopenports
che potrebbe essere di interesse.
Hai già scoperto quale processo uccidere: è il numero di processo 20570
e il suo binario ha il nome httpd
come scritto alla fine della riga dell'output di netstat
. Puoi ucciderlo per numero kill 20570
o per nome, killall httpd
ma 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 è httpd
e man httpd
dovrebbe 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 Center
sotto System
e 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-all
restituisce un elenco di tutti i servizi service
conosciuti e in grado di gestire. Una scorciatoia per un riavvio di un servizio (che è: arrestare e avviare in questo ordine) è service --full-restart SERVICE
con SERVICE
essendo il nome del servizio, ad esempio .: httpd
in caso di Apache.
La maggior parte dei programmi che trovi con netstat
possono essere gestiti in questo modo. Alcuni non possono e alcuni non hanno nemmeno una pagina di manuale, ma quelli sono rari.
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
killall
senza spiegazione o avviso.
-k
switch per uccidere tutti i processi di corrispondenza e-i
per uccidere in modo interattivo (chiedendo a ciascuno di essi).