Glossario/Quando qualcosa va storto
Porta in ascolto
Anche: porte aperte, cosa usa la porta 3000
In breve
Una porta in ascolto è una porta di rete su cui un processo aspetta connessioni in arrivo, come un server web sulla porta 3000. Solo un processo alla volta può restare in ascolto su una certa porta e indirizzo, ed è per questo che vedi errori come “address already in use”.
I server di sviluppo, i database e alcune app aprono porte in ascolto. Quando avvii un server e fallisce perché la porta è occupata, un altro processo, spesso una copia precedente dello stesso server, è ancora in ascolto lì.
Monitoraggio Attività può mostrare i file e le porte aperti da un processo, ma il modo più rapido per scoprire quale processo occupa una porta è il comando lsof nel Terminale.
Come scoprire cosa usa una porta
Esegui lsof -nP -iTCP:3000 -sTCP:LISTEN nel Terminale, sostituendo 3000 con la tua porta. L’output mostra il nome del comando e il suo PID.
Per elencare tutte le porte TCP in ascolto, esegui lsof -nP -iTCP -sTCP:LISTEN. Aggiungi sudo davanti per includere i processi di altri utenti.
Come liberare una porta
Se il processo è un server che hai avviato tu, fermalo prima nel modo normale, per esempio con Control-C nel terminale in cui gira. Altrimenti esegui kill <PID> con il PID trovato con lsof. Usa kill -9 <PID> solo se non si chiude.
Controlla il nome del processo prima di fermarlo. Alcune porte appartengono a servizi di macOS, come Ricevitore AirPlay, che nelle versioni recenti di macOS è in ascolto sulle porte 5000 e 7000.
Come vedere le porte in Monitoraggio Attività
Fai doppio clic su un processo e apri il pannello Porte e file aperti. Elenca i file e le connessioni di rete che il processo ha aperto.
Come leggere l’output di lsof
Ogni riga è un socket aperto. Un server di solito mostra due righe, una per IPv4 e una per IPv6, con lo stesso PID.
- COMMAND è il nome del processo, tagliato a 9 caratteri di default. Aggiungi
+c 0per vedere il nome completo:lsof +c 0 -nP -iTCP -sTCP:LISTEN. - PID è l’ID del processo da passare a
killops. - USER è l’account che lo esegue. I processi di root di solito fanno parte di macOS o di un servizio installato.
- NAME mostra indirizzo e porta.
*:3000significa che il server accetta connessioni su ogni interfaccia di rete.127.0.0.1:3000o[::1]:3000significa che può connettersi solo questo Mac.
Come vedere a quale progetto appartiene un server di sviluppo
Il nome del processo è spesso solo node, python o ruby, che non dice quale progetto è in esecuzione. Due comandi te lo dicono.
- Ottieni il PID con
lsof -nP -iTCP:3000 -sTCP:LISTEN. - Esegui
ps -o pid,ppid,command -p <PID>per vedere il comando completo che l’ha avviato. - Esegui
lsof -a -p <PID> -d cwdper vedere la cartella in cui è in esecuzione, che di solito è quella del progetto. - Se il PPID indica una shell, il server è stato avviato da una finestra del terminale. Fermalo lì con Control-C, se quella finestra è ancora aperta.
Perché la porta è occupata quando sembra che non giri niente
Se la porta appartiene a Ricevitore AirPlay, avvia il server su un’altra porta, oppure disattiva Ricevitore AirPlay in Impostazioni di Sistema > Generali, nella sezione AirDrop e Handoff.
- Un server di una sessione precedente è ancora in esecuzione in una scheda o finestra del terminale che hai dimenticato.
- Un server è stato avviato in background, o da un editor o da un altro strumento, e non ha una finestra visibile.
- Il server si è chiuso per errore ma un processo figlio che aveva avviato occupa ancora la porta.
- Un servizio di macOS usa la stessa porta, come Ricevitore AirPlay sulle porte 5000 e 7000.
La colonna Porte di Monitoraggio Attività non indica le porte di rete
Monitoraggio Attività ha una colonna facoltativa Porte nel pannello CPU. Conta le porte Mach, un meccanismo di messaggi che macOS usa tra i processi, lo stesso valore che top mostra come ports. Non elenca le porte di rete. Per quelle usa lsof o il pannello Porte e file aperti nella finestra di informazioni di un processo.
Domande frequenti
Come vedere cosa usa la porta 3000 sul Mac?
Esegui lsof -nP -iTCP:3000 -sTCP:LISTEN nel Terminale. Mostra il nome e il PID del processo in ascolto su quella porta.
Come terminare il processo che occupa una porta sul Mac?
Trova il suo PID con lsof, poi esegui kill <PID>. Se non si chiude, kill -9 <PID> lo termina subito.
Come elencare tutte le porte aperte sul Mac?
Esegui lsof -nP -iTCP -sTCP:LISTEN per elencare le porte TCP in ascolto. Aggiungi sudo per includere i processi di altri utenti.
Cosa significa “address already in use”?
Un altro processo è già in ascolto su quella porta e indirizzo. Trovalo con lsof -nP -iTCP:<port> -sTCP:LISTEN, poi fermalo o scegli un’altra porta.
Perché lsof non mostra niente per una porta occupata?
Il processo potrebbe appartenere a un altro utente o a root. Esegui lo stesso comando con sudo davanti per includere tutti i processi.
È sicuro terminare quello che occupa la porta 5000 o 7000?
Non senza controllare il nome. Nelle versioni recenti di macOS quelle porte sono spesso usate da Ricevitore AirPlay, che puoi invece disattivare in Impostazioni di Sistema.
Correlati
Passo per passo: Docker usa troppa memoria.
Cerchi qualcosa di meglio di Monitoraggio Attività? Leggi le migliori alternative a Monitoraggio Attività per Mac, oppure sfoglia tutti i termini del glossario.