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

use*_*108 175 macos port

我从java类打开端口#5955,从客户端通信.我完成后如何关闭此端口?如果端口打开或关闭,哪个命令可以显示?

Fut*_*020 350

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

    sudo lsof -i :5955
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用其PID终止当前正在使用该端口的进程

    sudo kill -9 PID
    
    Run Code Online (Sandbox Code Playgroud)

  • 发送-9不应该是杀死进程的第一次尝试,这是一个非常糟糕的习惯.我记得,你首先应该使用`kill PID`(暗示-15),然后尝试-2和-1.只有当**每**其他选项都无效时,-9才是最后的选择. (30认同)
  • 没有@Meow建议的任何标志杀死pID,这对我有用 (3认同)
  • 这个答案对我有用,但是这些数字(15,2,1,9)是什么意思?提前致谢。 (2认同)

小智 33

要找到该过程,请尝试:

sudo lsof -i :portNumber
Run Code Online (Sandbox Code Playgroud)

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

kill PID
Run Code Online (Sandbox Code Playgroud)

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

kill -9 PID
Run Code Online (Sandbox Code Playgroud)

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

sudo kill -9 PID
Run Code Online (Sandbox Code Playgroud)

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


Ami*_*esh 24

一个班轮是最好的

kill -9 $(lsof -i:PORT -t) 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

示例:在 mac 上,想要清除端口 9604。以下命令就像一个魅力

 kill -9 $(lsof -i:9604 -t) 2> /dev/null 
Run Code Online (Sandbox Code Playgroud)


aba*_*ert 23

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

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

如果要查找端口打开的进程,请尝试以下操作:

lsof -i :5955
Run Code Online (Sandbox Code Playgroud)

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

nc localhost 5955
Run Code Online (Sandbox Code Playgroud)

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

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


fli*_*lik 17

非常简单的找到端口5900:

sudo lsof -i :5900
Run Code Online (Sandbox Code Playgroud)

然后考虑将59553作为PID

sudo kill 59553
Run Code Online (Sandbox Code Playgroud)


Gel*_*Gel 11

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

须藤lsof -nPi:yourPortNumber

然后:

sudo kill -9 yourPIDnumber

  • `lsof -nPi` 稍微好一些,因为端口号在输出中实际上是可见的,并且您可以更好地了解您正在杀死的内容。 (2认同)

小智 8

使用命令查找进程ID

lsof -n -i4TCP:8080 
Run Code Online (Sandbox Code Playgroud)

获取processId后

sudo kill -9 processID
Run Code Online (Sandbox Code Playgroud)

然后提供您的系统密码。


Guy*_*ham 6

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

sudo netstat -ap | grep :<port_number>
Run Code Online (Sandbox Code Playgroud)

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

sudo netstat -ap | grep :8000
Run Code Online (Sandbox Code Playgroud)

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

tcp  0  0 *:8000   *:* LISTEN  4683/procHoldingPort
Run Code Online (Sandbox Code Playgroud)

在这种情况下,procHoldingPort是打开端口的进程的名称,4683是其pid,而8000(注意它是TCP)是它保存的端口号(您希望关闭它).

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

kill  4683
Run Code Online (Sandbox Code Playgroud)

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

kill -9 4683
Run Code Online (Sandbox Code Playgroud)

同样,一般来说,如果可以的话,最好避免发送SIGKILL(-9).

干杯,

盖伊.


小智 6

我为此目的创建了一个函数。

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
Run Code Online (Sandbox Code Playgroud)

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


Pau*_*aul 6

简单单线

今天有一种比其他命令更简单的命令(没有 Sudo、软件包或多行)要杀死端口 8080,只需调用:

lsof -ti tcp:8080 | xargs kill


Xtr*_*ity 5

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

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

https://github.com/xtrasimplicity/killport


小智 5

这似乎对我有用。只需将 your_port_number 更改为您要停止的端口号即可。

sudo lsof -t -i tcp:your_port_number | xargs kill -9
Run Code Online (Sandbox Code Playgroud)