Lauschender Port (Listening Port)
Auch: offene Ports, was belegt Port 3000
Kurze Antwort
Ein lauschender Port ist ein Netzwerkport, an dem ein Prozess auf eingehende Verbindungen wartet, etwa ein Webserver auf Port 3000. Nur ein Prozess kann gleichzeitig an einem bestimmten Port und einer Adresse lauschen. Deshalb siehst du Fehler wie „address already in use“.
Entwicklungsserver, Datenbanken und manche Apps öffnen lauschende Ports. Wenn du einen Server startest und er scheitert, weil der Port belegt ist, lauscht dort noch ein anderer Prozess, oft eine frühere Instanz desselben Servers.
Die Aktivitätsanzeige kann die geöffneten Dateien und Ports eines Prozesses zeigen, aber am schnellsten findest du den Prozess zu einem Port mit dem Befehl lsof im Terminal.
So findest du heraus, was einen Port belegt
Führe lsof -nP -iTCP:3000 -sTCP:LISTEN im Terminal aus und ersetze 3000 durch deinen Port. Die Ausgabe zeigt den Befehlsnamen und seine PID.
Um alle lauschenden TCP-Ports aufzulisten, führe lsof -nP -iTCP -sTCP:LISTEN aus. Setze sudo davor, um auch Prozesse anderer Benutzer:innen einzubeziehen.
So gibst du einen Port frei
Ist der Prozess ein Server, den du gestartet hast, stoppe ihn zuerst auf dem normalen Weg, zum Beispiel mit ctrl-C im Terminal, in dem er läuft. Sonst führe kill <PID> mit der PID aus lsof aus. Nutze kill -9 <PID> nur, wenn er sich nicht beendet.
Prüfe den Prozessnamen, bevor du ihn stoppst. Manche Ports gehören zu macOS-Diensten, etwa dem AirPlay-Empfänger, der in aktuellen macOS-Versionen an den Ports 5000 und 7000 lauscht.
So siehst du Ports in der Aktivitätsanzeige
Doppelklicke auf einen Prozess und öffne den Tab „Geöffnete Dateien und Ports“. Er listet die Dateien und Netzwerkverbindungen, die der Prozess geöffnet hat.
So liest du die Ausgabe von lsof
Jede Zeile ist ein offener Socket. Ein Server zeigt meist zwei Zeilen, eine für IPv4 und eine für IPv6, mit derselben PID.
- COMMAND ist der Prozessname, standardmäßig auf 9 Zeichen gekürzt. Mit
+c 0siehst du den vollen Namen:lsof +c 0 -nP -iTCP -sTCP:LISTEN. - PID ist die Prozess-ID, die du an
killoderpsübergibst. - USER ist der Account, der ihn ausführt. Prozesse, die root gehören, sind meist Teil von macOS oder eines installierten Dienstes.
- NAME zeigt Adresse und Port.
*:3000bedeutet, dass der Server Verbindungen auf allen Netzwerkschnittstellen annimmt.127.0.0.1:3000oder[::1]:3000bedeutet, dass sich nur dieser Mac verbinden kann.
So siehst du, zu welchem Projekt ein Dev-Server gehört
Der Prozessname ist oft nur node, python oder ruby, was nicht verrät, welches Projekt läuft. Zwei Befehle beantworten das.
- Hol dir die PID mit
lsof -nP -iTCP:3000 -sTCP:LISTEN. - Führe
ps -o pid,ppid,command -p <PID>aus, um den vollständigen Befehl zu sehen, der ihn gestartet hat. - Führe
lsof -a -p <PID> -d cwdaus, um den Ordner zu sehen, in dem er läuft. Meist ist das der Projektordner. - Zeigt die PPID auf eine Shell, wurde der Server in einem Terminal-Fenster gestartet. Stoppe ihn dort mit ctrl-C, wenn das Fenster noch offen ist.
Warum der Port belegt ist, obwohl scheinbar nichts läuft
Gehört der Port zum AirPlay-Empfänger, starte deinen Server auf einem anderen Port oder schalte den AirPlay-Empfänger unter „Systemeinstellungen“ > „Allgemein“ im Bereich „AirDrop & Handoff“ aus.
- Ein Server aus einer früheren Sitzung läuft noch in einem Terminal-Tab oder -Fenster, das du vergessen hast.
- Ein Server wurde im Hintergrund gestartet, von einem Editor oder einem anderen Tool, und hat kein sichtbares Fenster.
- Der Server ist abgestürzt, aber ein von ihm gestarteter Unterprozess hält den Port noch.
- Ein macOS-Dienst nutzt denselben Port, etwa der AirPlay-Empfänger auf den Ports 5000 und 7000.
Die Spalte „Ports“ in der Aktivitätsanzeige zeigt keine Netzwerkports
Die Aktivitätsanzeige hat im Tab „CPU“ eine optionale Spalte „Ports“. Sie zählt Mach-Ports, einen Mechanismus, über den macOS Nachrichten zwischen Prozessen austauscht, derselbe Wert, den top als Ports zeigt. Netzwerkports listet sie nicht. Für Netzwerkports nutze lsof oder den Tab „Geöffnete Dateien und Ports“ im Informationsfenster eines Prozesses.
Häufige Fragen
Wie sehe ich auf dem Mac, was Port 3000 belegt?
Führe lsof -nP -iTCP:3000 -sTCP:LISTEN im Terminal aus. Der Befehl zeigt Namen und PID des Prozesses, der an diesem Port lauscht.
Wie beende ich auf dem Mac einen Prozess, der einen Port belegt?
Finde seine PID mit lsof und führe dann kill <PID> aus. Beendet er sich nicht, beendet ihn kill -9 <PID> sofort.
Wie liste ich alle offenen Ports auf dem Mac auf?
Führe lsof -nP -iTCP -sTCP:LISTEN aus, um lauschende TCP-Ports aufzulisten. Füge sudo hinzu, um Prozesse anderer Benutzer:innen einzubeziehen.
Was bedeutet „address already in use“?
Ein anderer Prozess lauscht bereits an diesem Port und dieser Adresse. Finde ihn mit lsof -nP -iTCP:<port> -sTCP:LISTEN und stoppe ihn oder wähle einen anderen Port.
Warum zeigt lsof nichts für einen Port, der belegt ist?
Der Prozess gehört vielleicht einem anderen Benutzeraccount oder root. Führe denselben Befehl mit sudo davor aus, um jeden Prozess einzubeziehen.
Kann ich gefahrlos beenden, was auf Port 5000 oder 7000 läuft?
Nicht, ohne den Namen zu prüfen. In aktuellen macOS-Versionen nutzt oft der AirPlay-Empfänger diese Ports, und den kannst du stattdessen in den Systemeinstellungen ausschalten.
Verwandte Begriffe
Schritt für Schritt: Docker braucht zu viel Speicher.
Suchst du etwas Besseres als die Aktivitätsanzeige? Sieh dir die besten Alternativen zur Aktivitätsanzeige für den Mac an, oder stöbere durch alle Begriffe im Glossar.