How do I close an open port from the terminal on the Mac?

MacosPort

Macos Problem Overview


I opened port #5955 from a java class to comunicate from a client. How do i close this port after I am done? and also which command can show me if port open or closed?

Macos Solutions


Solution 1 - Macos

  1. Find out the process ID (PID) which is occupying the port number (e.g., 5955) you would like to free

     sudo lsof -i :5955
    
  2. Kill the process which is currently using the port using its PID

     sudo kill -9 PID
    

Solution 2 - Macos

To find the process try:

sudo lsof -i :portNumber

Kill the process which is currently using the port using its PID

kill PID

and then check to see if the port closed. If not, try:

kill -9 PID

I would only do the following if the previous didnt work

sudo kill -9 PID

Just to be safe. Again depending on how you opened the port, this may not matter.

Solution 3 - Macos

In 2018 here is what worked for me using MacOS HighSierra:

sudo lsof -nPi :yourPortNumber

then:

sudo kill -9 yourPIDnumber

Solution 4 - Macos

very simple find port 5900:

sudo lsof -i :5900

then considering 59553 as PID

sudo kill 59553

Solution 5 - Macos

However you opened the port, you close it in the same way. For example, if you created a socket, bound it to port 0.0.0.0:5955, and called listen, close that same socket.

You can also just kill the process that has the port open.

If you want to find out what process has a port open, try this:

lsof -i :5955

If you want to know whether a port is open, you can do the same lsof command (if any process has it open, it's open; otherwise, it's not), or you can just try to connect to it, e.g.:

nc localhost 5955

If it returns immediately with no output, the port isn't open.

It may be worth mentioning that, technically speaking, it's not a port that's open, but a host:port combination. For example, if you're plugged into a LAN as 10.0.1.2, you could bind a socket to 127.0.0.1:5955, or 10.0.1.2:5955, without either one affecting the other, or you could bind to 0.0.0.0:5955 to handle both at once. You can see all of your computer's IPv4 and IPv6 addresses with the ifconfig command.

Solution 6 - Macos

One liner is best

kill -9 $(lsof -i:PORT -t) 2> /dev/null

Example : On mac, wanted to clear port 9604. Following command worked like a charm

 kill -9 $(lsof -i:9604 -t) 2> /dev/null 

Solution 7 - Macos

You can also use this first command to kill a process that owns a particular port:

sudo netstat -ap | grep :<port_number>

For example, say this process holds port 8000 TCP, then running the command:

sudo netstat -ap | grep :8000

will output the line corresponding to the process holding port 8000, for example:

tcp  0  0 *:8000   *:* LISTEN  4683/procHoldingPort

In this case, procHoldingPort is the name of the process that opened the port, 4683 is its pid, and 8000 (note that it is TCP) is the port number it holds (which you wish to close).

Then kill the process, following the above example:

kill  4683

As others mentioned here out, if that doesn't work (you can try using kill with -9 as an argument):

kill -9 4683

Again, in general, it's better to avoid sending SIGKILL (-9) if you can.

Solution 8 - Macos

Find the process ID using command

lsof -n -i4TCP:8080 

After getting the processId

sudo kill -9 processID

Then provide your system password.

Solution 9 - Macos

I have created a function for this purpose.

function free_port() {
    if [ -z $1 ] 
    then
        echo no Port given
    else
        PORT=$1;
        PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port 

        if [ -z $PID ] 
        then
            echo port: $PORT is already free.
        else
            sudo kill -9 $PID # kill the process, which frees the port
            echo port: $PORT is now free.
        fi
    fi
}

free_port 80 # you need to change this port number

Copy & pasting this block of code in your terminal should free your desired port. Just remember to change the port number in last line.

Solution 10 - Macos

I use lsof combined with kill, as mentioned above; but wrote a quick little bash script to automate this process.

With this script, you can simply type killport 3000 from anywhere, and it will kill all processes running on port 3000.

https://github.com/xtrasimplicity/killport

Solution 11 - Macos

try below, assuming running port is 8000:

free-port() { kill "$(lsof -t -i :8000)"; }

I found the reference here

Solution 12 - Macos

This seem to work for me. Just change your_port_number into the port number you want to stop.

sudo lsof -t -i tcp:your_port_number | xargs kill -9

Solution 13 - Macos

When the program that opened the port exits, the port will be closed automatically. If you kill the Java process running this server, that should do it.

Solution 14 - Macos

  1. First find out the Procees id (pid) which has occupied the required port.(e.g 5434)

    ps aux | grep 5434

2.kill that process

   kill -9 <pid>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1667108View Question on Stackoverflow
Solution 1 - MacosFuture2020View Answer on Stackoverflow
Solution 2 - MacosoesteView Answer on Stackoverflow
Solution 3 - MacosGelView Answer on Stackoverflow
Solution 4 - MacosflikView Answer on Stackoverflow
Solution 5 - MacosabarnertView Answer on Stackoverflow
Solution 6 - MacosAmitesh BhartiView Answer on Stackoverflow
Solution 7 - MacosGuy AvrahamView Answer on Stackoverflow
Solution 8 - Macosswarup bholView Answer on Stackoverflow
Solution 9 - MacosMd. Khairul IslamView Answer on Stackoverflow
Solution 10 - MacosXtraSimplicityView Answer on Stackoverflow
Solution 11 - MacosHasan A YousefView Answer on Stackoverflow
Solution 12 - Macosbijay subediView Answer on Stackoverflow
Solution 13 - MacosBarmarView Answer on Stackoverflow
Solution 14 - MacosAshutosh GuptaView Answer on Stackoverflow