如何从Mac上的终端关闭打开的端口?

时间:2012-09-12 22:50:46

标签: macos port

我从java类打开端口#5955以从客户端进行通信。我完成后如何关闭此端口?以及哪个命令可以显示端口是打开还是关闭?

12 个答案:

答案 0 :(得分:313)

  1. 找出占用您想要释放的端口号(例如5955)的进程ID(PID)

    sudo lsof -i :5955
    
  2. 使用其PID

    终止当前正在使用该端口的进程
    sudo kill -9 PID
    

答案 1 :(得分:27)

要找到该过程,请尝试:

sudo lsof -i :portNumber

使用其PID

终止当前正在使用该端口的进程
kill PID

然后检查端口是否关闭。如果没有,请尝试:

kill -9 PID

如果以前没有工作,我只会做以下事情

sudo kill -9 PID

为了安全起见。再次取决于您打开端口的方式,这可能无关紧要。

答案 2 :(得分:23)

但是,您打开了端口,然后以相同的方式关闭它。例如,如果您创建了一个套接字,将其绑定到端口0.0.0.0:5955,并调用listen,则关闭该套接字。

您也可以杀死打开端口的进程。

如果您想了解哪个进程打开了端口,请尝试以下操作:

lsof -i :5955

如果你想知道一个端口是否打开,你可以执行相同的lsof命令(如果任何进程打开它,它是打开的;否则,它不是),或者你可以尝试连接它,例如:

nc localhost 5955

如果它立即返回而没有输出,则端口未打开。

值得一提的是,从技术上讲,它不是一个开放的端口,而是一个主机:端口组合。例如,如果您以10.0.1.2的形式插入LAN,则可以将套接字绑定到127.0.0.1:5955或10.0.1.2:5955,而不会影响另一个,或者可以绑定到0.0.0.0 :5955一次处理两个。您可以使用ifconfig命令查看计算机的所有IPv4和IPv6地址。

答案 3 :(得分:7)

非常简单的查找端口5900:

sudo lsof -i :5900

然后考虑将59553作为PID

sudo kill 59553

答案 4 :(得分:6)

您还可以使用此第一个命令来终止拥有特定端口的进程:

sudo netstat -ap | grep :<port_number>

例如,假设此进程保存端口 8000 TCP,然后运行命令:

sudo netstat -ap | grep :8000

将输出与进程保持端口 8000 对应的行,例如:

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

在这种情况下, procHoldingPort 是打开端口的进程的名称, 4683 是其pid和 8000 (请注意它是TCP)是它拥有的端口号(您希望关闭它)。

然后按照上面的例子终止进程:

kill  4683

正如其他人在此提到的那样,如果这不起作用(你可以尝试使用kill -9作为参数):

kill -9 4683

同样,一般情况下,如果可以,最好避免发送SIGKILL(-9)。

干杯,

盖。

答案 5 :(得分:5)

如上所述,我将Add Licenselsof结合使用;但写了一个快速的小bash脚本来自动化这个过程。

使用此脚本,您只需从任何位置键入kill,它将终止在端口killport 3000上运行的所有进程。

https://github.com/xtrasimplicity/killport

答案 6 :(得分:2)

在2018年,这是使用MacOS HighSierra对我有用的:

sudo lsof -nPi:yourPortNumber

然后:

sudo kill -9 yourPIDnumber

答案 7 :(得分:1)

当打开端口的程序退出时,端口将自动关闭。如果您终止运行此服务器的Java进程,那应该这样做。

答案 8 :(得分:1)

我为此创建了一个函数。

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

在您的终端中复制并粘贴此代码块可以释放所需的端口。只需记住在最后一行更改端口号即可。

答案 9 :(得分:1)

尝试以下操作,假设运行端口为8000

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

我找到了参考文献here

答案 10 :(得分:1)

一个衬里最好

toolbox = base.Toolbox()
toolbox.register("attr_flt", random.uniform, 0, 1)

creator.create("FitnessMin", base.Fitness, weights=(-1.0, -1.0)) #you want to minimize both times
creator.create("Individual", list, fitness=creator.FitnessMin)

toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, n=5)
toolbox.register("evaluate", evaluate)

示例: 在Mac上,想要清除端口9604。以下命令就像一个超级按钮一样工作

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

答案 11 :(得分:-2)

  1. 首先找出占用所需端口的Procees id(pid)。(例如5434)

    ps aux | grep 5434

  2. 2.杀死那个过程

       kill -9 <pid>