macostcpnetwork-programmingnetstatlisten

Who is listening on a given TCP port on Mac OS X?


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?


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