You started a service, you can’t tell whether it actually bound to its port, and you want to see what’s listening — or you want to find out which process is squatting on port 8080. Two one-liners, two operating systems:
macOS
1 | lsof -nP -i4TCP |
RedHat / CentOS 7
1 | netstat -tulpn |
What the flags do: lsof -nP turns off DNS and port-name resolution (so you see 192.168.1.5:443 instead of app-server.local:https — faster and unambiguous). -i4TCP filters to IPv4 TCP sockets. For netstat -tulpn: t = TCP, u = UDP, l = listening only, p = show the PID/process, n = numeric (no DNS).
A few useful additions.
On modern Linux, prefer ss over netstat. The net-tools package that ships netstat is largely deprecated — most distros have moved to iproute2‘s ss (socket statistics). It’s faster on busy machines (reads from netlink instead of /proc) and uses the same flags you already know:
1 | ss -tulpn |
If you’ve been muscle-memory-typing netstat for years, the migration is one character. Same flags, same shape, modern implementation.
Listening-only on macOS. lsof -i4TCP shows every TCP connection — listeners and established. To narrow to just the things accepting new connections, add -sTCP:LISTEN:
1 2 3 4 5 | # All listening TCP sockets (IPv4 + IPv6) lsof -nP -iTCP -sTCP:LISTEN # Add UDP for the full picture lsof -nP -iUDP |
The question you actually want answered: “what’s on port 8080?” Three flavours of the same question:
1 2 3 4 5 6 7 8 | # macOS / Linux lsof -i :8080 # Linux (modern) ss -tulpn | grep :8080 # Linux (also handy — kill-by-port) sudo fuser -k 8080/tcp |
The last one is the nuclear option: fuser -k kills whoever has the port. Useful when a stale process is holding it and you don’t care about graceful shutdown.
Run it as root if you want to see other users’ processes. Without sudo, lsof, netstat -p, and ss -p only show process names for processes you own. If you see a port listed as LISTEN but the PID column is blank, that’s the symptom — re-run with sudo and the owner pops out.
Windows. The closest equivalent on Windows is netstat -ano from cmd (the -o shows the PID; cross-reference in Task Manager or with tasklist /fi “PID eq 1234”). PowerShell users get something nicer — Get-NetTCPConnection returns proper objects you can pipe and filter:
1 | Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess |
Pair that with Get-Process -Id $pid to translate OwningProcess back to a process name. 🔌