Antworten:
Es gibt verschiedene Möglichkeiten, um herauszufinden, welcher laufende Prozess einen Port verwendet.
Bei Verwendung der Fixiereinheit werden die PIDs der mehreren Instanzen angegeben, die dem Überwachungsport zugeordnet sind.
sudo apt-get install psmisc
sudo fuser 80/tcp
80/tcp: 1858 1867 1868 1869 1871
Nachdem Sie es herausgefunden haben, können Sie die Prozesse entweder stoppen oder beenden.
Sie können die PIDs und weitere Details auch mit lsof finden
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)
Zur Begrenzung auf Sockets , die hören auf Port 80 (im Gegensatz zu Kunden gegenüber, die auf Port 80 verbinden):
sudo lsof -i tcp:80 -s tcp:listen
Um sie automatisch zu töten:
sudo lsof -t -i tcp:80 -s tcp:listen | sudo xargs kill
Hier ist ein Oneliner, der den auszuführenden Befehl anzeigt:
echo kill $(sudo netstat -anp | awk '/ LISTEN / {if($4 ~ ":80$") { gsub("/.*","",$7); print $7; exit } }')
Ersetzen echo
durch, sudo
damit der Prozess tatsächlich beendet wird.
echo
fürsudo
80
.
In jsh 's werden drei Optionen zum Auflisten offener Ports angeboten whatisonport
:
netstat -anp --numeric-ports | grep ":${PORT}\>.*:"
fuser -v "${PORT}"/tcp
lsof -P -S 2 -i "tcp:${PORT}" | grep "\(:${PORT}->.*:\|:$PORT (LISTEN)$\)"
Ich bevorzuge, netstat
weil es schnell und präzise ist und Ports auflisten kann, die von anderen Benutzern geöffnet wurden. (Obwohl weiterhin Superuser- / Benutzerrechte erforderlich sind, um die Namen und PIDs solcher Prozesse aufzulisten.)
$ 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)
...
Die Verwendung von grep
in zwei Fällen ist auf der lokalen Seite nur den Hafen zu entsprechen, und übersprang offene Verbindungen zu einem Remote - Port 80 (Eine Alternative wäre die Verwendung -l
mit netstat
oder mit lsof
zu verwenden -sTCP:LISTEN
, aber ich mag den greps oben , weil sie wollen Fangen Sie auch ausgehende Verbindungen vom angegebenen Port ab, was gelegentlich von Interesse sein kann.)
Mit verwenden lsof
wir, -P
um anzuzeigen, :80
anstatt :http
das grep möglich zu machen. Die -S 2
Option muss lsof
rechtzeitig abgeschlossen werden.
Angenommen, wir möchten verwenden netstat
, könnten wir die PIDs wie folgt erfassen:
$ netstat -anp --numeric-ports | grep ":80\>.*:" | grep -o "[0-9]*/" | sed 's+/$++'
1914
...
Und wir könnten diese PIDs sogar weitergeben an kill
:
... | xargs -d '\n' kill -KILL
Bei der Verwendung von regulären Ausdrücken kann es jedoch häufig zu Fehlalarmen kommen. Daher würde ich empfehlen, nur die anfängliche Ausgabe von zu betrachten netstat
und dann manuell zu entscheiden, ob Folgendes ausgeführt werden soll oder nicht:
$ kill -KILL 1914
Ich habe ein anderes Skript namens, listopenports
das von Interesse sein kann.
Sie haben bereits herausgefunden, welcher Prozess beendet werden soll: Die Prozessnummer 20570
und die Binärdatei haben den Namen httpd
, der am Ende der Zeile der Ausgabe von steht netstat
. Sie können es nach Nummer kill 20570
oder Name töten, killall httpd
aber ich würde nicht empfehlen, es so zu machen.
Ports unter 1024 werden (normalerweise) standardisiert verwendet. Sie können diese und viele andere Ports nachschlagen less /etc/services
. Der Eintrag für Port 80 ist sogar kommentiert:
http 80/tcp www # WorldWideWeb HTTP
Es handelt sich also höchstwahrscheinlich um einen Webserver. Der Name, den Sie haben, ist httpd
und man httpd
sollte Ihnen den großen Hinweis geben, dass es die Apache-Binärdatei ist, die passt. Apache ist einer der großen Player. Es stehen einige komfortable Management-Programme zur Verfügung, die Sie jedoch nicht für eine bloße Start / Stopp-Aktion benötigen.
Sie haben Minze? Mit einem normalen Desktop? Dann schauen Sie in das Control Center
Unter System
und klicken Sie Services
. Sie müssen Administrator sein, um dort etwas zu tun. Scrollen Sie nach unten, bis Sie etwas mit der Bezeichnung "Webserver" finden (ich habe lighttpd anstelle von Apache und weiß nicht genau, wie der Apache-Eintrag aussehen würde) und deaktivieren Sie es.
Wenn Sie es nur vorübergehend stoppen möchten, versuchen Sie es in der Konsole
sudo service stop httpd
und beginnen mit sudo service start httpd
. service --status-all
Gibt eine Liste aller Dienste zurück service
, die bekannt sind und verarbeitet werden können. Eine Verknüpfung für einen Neustart eines Dienstes (das heißt: stop und es in dieser Reihenfolge starten) ist service --full-restart SERVICE
mit SERVICE
dem Namen des Dienstes zu sein, zB .: httpd
bei Apache.
Die meisten Programme, mit denen Sie arbeiten, netstat
können auf diese Weise behandelt werden. Einige können nicht und einige haben nicht einmal eine Manpage, aber diese sind selten.
Es gibt einen einfachen Weg, dies zu tun. Überprüfen Sie zunächst, welcher Prozess Port 80 von netstat verwendet :
netstat -ntl | grep 80
Jetzt haben Sie den Prozessnamen und beenden den Prozess mit dem Befehl killall :
killall -9 process name
killall
ohne Erklärung oder Warnung.
-k
Schalter hat, alle übereinstimmenden Prozesse zu beenden und-i
interaktiv zu beenden (was Sie zu jedem einzelnen auffordert).