Woordenlijst/Als er iets misgaat

Luisterende poort

Ook: open poorten, wat gebruikt poort 3000

Kort antwoord

Een luisterende poort is een netwerkpoort waar een proces op binnenkomende verbindingen wacht, zoals een webserver op poort 3000. Er kan maar één proces tegelijk op een bepaalde poort en een bepaald adres luisteren. Daarom zie je fouten als ‘address already in use’.

Dev-servers, databases en sommige apps openen luisterende poorten. Start je een server en mislukt dat omdat de poort bezet is, dan luistert daar nog een ander proces, vaak een eerdere kopie van dezelfde server.

Activiteitenweergave kan de open bestanden en poorten van een proces tonen, maar de snelste manier om te vinden welk proces een poort bezet houdt, is de opdracht lsof in Terminal.

Zo vind je wat een poort gebruikt

Voer lsof -nP -iTCP:3000 -sTCP:LISTEN uit in Terminal en vervang 3000 door je eigen poort. De uitvoer toont de naam van de opdracht en de PID.

Voer lsof -nP -iTCP -sTCP:LISTEN uit om elke luisterende TCP-poort te tonen. Zet er sudo voor om ook processen van andere gebruikers mee te nemen.

Zo maak je een poort vrij

Is het proces een server die je zelf hebt gestart, stop hem dan eerst op de gewone manier, bijvoorbeeld met Control-C in de terminal waar hij draait. Voer anders kill <PID> uit met de PID uit lsof. Gebruik kill -9 <PID> alleen als hij niet stopt.

Controleer de procesnaam voordat je het stopt. Sommige poorten horen bij voorzieningen van macOS, zoals de AirPlay-ontvanger, die in recente versies van macOS op poort 5000 en 7000 luistert.

Zo zie je poorten in Activiteitenweergave

Dubbelklik op een proces en open het tabblad ‘Open bestanden en poorten’. Daar staan de bestanden en netwerkverbindingen die het proces open heeft.

Zo lees je de uitvoer van lsof

Elke regel is één open socket. Een server toont meestal twee regels, één voor IPv4 en één voor IPv6, met dezelfde PID.

  • COMMAND is de procesnaam, standaard afgekapt op 9 tekens. Voeg +c 0 toe om de volledige naam te zien: lsof +c 0 -nP -iTCP -sTCP:LISTEN.
  • PID is de proces-ID die je aan kill of ps meegeeft.
  • USER is het account dat het proces draait. Processen van root horen meestal bij macOS of bij een geïnstalleerde dienst.
  • NAME toont het adres en de poort. *:3000 betekent dat de server verbindingen accepteert op elke netwerkinterface. 127.0.0.1:3000 of [::1]:3000 betekent dat alleen deze Mac verbinding kan maken.

Zo zie je bij welk project een dev-server hoort

De procesnaam is vaak gewoon node, python of ruby, en daaraan zie je niet welk project er draait. Twee opdrachten geven het antwoord.

  1. Vraag de PID op met lsof -nP -iTCP:3000 -sTCP:LISTEN.
  2. Voer ps -o pid,ppid,command -p <PID> uit om de volledige opdracht te zien waarmee het is gestart.
  3. Voer lsof -a -p <PID> -d cwd uit om de map te zien waarin het draait, meestal de projectmap.
  4. Wijst de PPID naar een shell, dan is de server vanuit een terminalvenster gestart. Stop hem daar met Control-C als dat venster nog open is.

Waarom de poort bezet is terwijl er niets lijkt te draaien

Hoort de poort bij de AirPlay-ontvanger, laat je server dan op een andere poort draaien, of zet de AirPlay-ontvanger uit in Systeeminstellingen > Algemeen, in het gedeelte AirDrop en Continuïteit.

  • Een server uit een eerdere sessie draait nog in een terminaltabblad of -venster dat je vergeten was.
  • Een server is op de achtergrond gestart, of door een editor of ander hulpmiddel, en heeft geen zichtbaar venster.
  • De server is gecrasht, maar een onderliggend proces dat hij startte, houdt de poort nog bezet.
  • Een voorziening van macOS gebruikt dezelfde poort, zoals de AirPlay-ontvanger op poort 5000 en 7000.

De kolom Poorten in Activiteitenweergave gaat niet over netwerkpoorten

Activiteitenweergave heeft een optionele kolom Poorten in het tabblad CPU. Die telt Mach-poorten, een berichtensysteem dat macOS tussen processen gebruikt: hetzelfde getal dat top als ports toont. Netwerkpoorten staan er niet in. Gebruik voor netwerkpoorten lsof of het tabblad ‘Open bestanden en poorten’ in het infovenster van een proces.

Vragen die mensen stellen

Hoe zie ik wat poort 3000 gebruikt op een Mac?

Voer lsof -nP -iTCP:3000 -sTCP:LISTEN uit in Terminal. Het toont de naam en de PID van het proces dat op die poort luistert.

Hoe stop ik het proces op een poort op een Mac?

Zoek de PID op met lsof en voer dan kill <PID> uit. Stopt het niet, dan beëindigt kill -9 <PID> het meteen.

Hoe toon ik alle open poorten op een Mac?

Voer lsof -nP -iTCP -sTCP:LISTEN uit om de luisterende TCP-poorten te tonen. Voeg sudo toe om ook processen van andere gebruikers te zien.

Wat betekent ‘address already in use’?

Een ander proces luistert al op die poort en dat adres. Zoek het op met lsof -nP -iTCP:<port> -sTCP:LISTEN en stop het, of kies een andere poort.

Waarom toont lsof niets voor een poort die in gebruik is?

Het proces kan van een andere gebruiker of van root zijn. Voer dezelfde opdracht uit met sudo ervoor om elk proces mee te nemen.

Kan ik veilig stoppen wat er op poort 5000 of 7000 draait?

Niet zonder de naam te controleren. In recente versies van macOS worden die poorten vaak door de AirPlay-ontvanger gebruikt, en die kun je in plaats daarvan uitzetten in Systeeminstellingen.

Gerelateerd

Stap voor stap: Docker gebruikt te veel geheugen.

Op zoek naar iets beters dan Activiteitenweergave? Bekijk de beste alternatieven voor Activiteitenweergave op de Mac, of blader door alle begrippen in de woordenlijst.