Who is listening on a given TCP port on Mac OS X?
listen, macos, netstat, network-programming, tcp
Solution
On macOS `Big Sur` and later, use this command:
sudo lsof -i -P | grep LISTEN | grep :$PORT
or to just see just IPv4:
sudo lsof -nP -i4TCP:$PORT | grep LISTEN
On older versions, use one of the following forms:
sudo lsof -nP -iTCP:$PORT | grep LISTEN
sudo lsof -nP -i:$PORT | grep LISTEN
Substitute `$PORT` with the port number or a comma-separated list of port numbers.
`sudo` may not be needed if you need information on ports above 1023.
The `-n` flag is for displaying IP addresses instead of host names. This makes the command execute much faster, because DNS lookups to get the host names can be slow (several seconds or a minute for many hosts).
The `-P` flag is for displaying raw port numbers instead of resolved names like `http`, `ftp` or more esoteric service names like `dpserve`, `socalia`.
See the comments for more options.
For completeness, because frequently used together:
To kill the PID:
sudo kill -9 <PID>
# kill -9 60401
Problem
On Linux, I can use `netstat -pntl | grep $PORT` or `fuser -n tcp $PORT` to find out which process (PID) is listening on the specified TCP port. How do I get the same information on Mac OS X?