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 echocon sudoil processo per essere effettivamente ucciso.
echopersudo
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 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.)
$ 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.
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
Ho un altro script chiamato listopenportsche potrebbe essere di interesse.
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.
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
killallsenza spiegazione o avviso.
-kswitch per uccidere tutti i processi di corrispondenza e-iper uccidere in modo interattivo (chiedendo a ciascuno di essi).