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

我从java类中打开了端口#5955,以便从客户端进行通信。我怎么关闭这个端口后,我做了?还有哪个命令可以显示我如果端口打开或关闭?

439657 次浏览

无论您如何打开端口,您都可以以相同的方式关闭它。例如,如果您创建了一个套接字,将其绑定到端口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地址。

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

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

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

    sudo kill -9 PID
    
  1. 首先找出占用了所需端口的进程id (pid)。g 5434)

    Ps aux | grep 5434

2.终止这个过程

   kill -9 <pid>

要找到流程,请尝试:

sudo lsof -i :portNumber

使用PID杀死当前正在使用该端口的进程

kill PID

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

kill -9 PID

如果前面的方法不管用,我只会做下面的

sudo kill -9 PID

安全起见。同样,这取决于您如何打开端口,这可能无关紧要。

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

使用这个脚本,你可以在任何地方输入killport 3000,它会杀死端口3000上运行的所有进程。

https://github.com/xtrasimplicity/killport

你也可以使用第一个命令来杀死一个拥有特定端口的进程:

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

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

kill -9 4683

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

我为此创建了一个函数。

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

及复印件;将这段代码块粘贴到终端可以释放所需的端口。记得修改最后一行的端口号。

非常简单的找到端口5900:

sudo lsof -i :5900

然后考虑59553作为PID

sudo kill 59553

下面尝试,假设运行端口为8000:

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

我找到了引用在这里

编辑

在2022年9月,这帮助了我的MacOS Monterey M1 Pro芯片:

sudo lsof -t -i tcp:yourPortNumber | sudo xargs kill

在2018年,我使用MacOS HighSierra的方法是这样的:

sudo lsof -nPi :yourPortNumber

然后:

sudo kill -9 yourPIDnumber

一行最好

kill -9 $(lsof -i:PORT -t) 2> /dev/null
< p >的例子: 在mac上,想清除9604端口。下面的命令就像一个咒语

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

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

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

使用命令查找进程ID

lsof -n -i4TCP:8080

在获得processId之后

sudo kill -9 processID

然后提供您的系统密码。

简单的一行程序

今天有一种比其他命令(没有Sudo,包或多行)更直接的命令。 要终止端口8080,只需调用:

lsof -ti tcp:8080 | xargs kill