简体   繁体   中英

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

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?

  1. Find out the process ID (PID) which is occupying the port number (eg, 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

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.

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

sudo lsof -nPi :yourPortNumber

then:

sudo kill -9 yourPIDnumber

very simple find port 5900:

sudo lsof -i :5900

then considering 59553 as PID

sudo kill 59553

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, eg:

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.

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 

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.

Find the process ID using command

lsof -n -i4TCP:8080 

After getting the processId

sudo kill -9 processID

Then provide your system password.

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.

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

try below, assuming running port is 8000 :

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

I found the reference here

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

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.

WTF. I want close socket without process kills.

Update 2022

There is a way more straightforward command today, than the other ones (without Sudo, or multiple lines) To kill port 8080 simply call:

lsof -ti tcp:8080 | xargs kill

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

    ps aux | grep 5434

2.kill that process

   kill -9 <pid>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM