我从 java 类打开端口 #5955 以与客户端进行通信。完成后如何关闭此端口?哪个命令可以显示端口是否打开或关闭?
找出正在占用您想要释放的端口号(例如5955)的进程ID(PID)
sudo lsof -i :5955
使用 PID 杀死当前正在使用该端口的进程
sudo kill -9 PID
要查找进程,请尝试:
sudo lsof -i :portNumber
使用 PID 杀死当前正在使用该端口的进程
kill PID
然后检查端口是否关闭。如果没有,请尝试:
kill -9 PID
如果前面的方法不起作用,我只会执行以下操作
sudo kill -9 PID
只是为了安全起见。同样取决于您打开端口的方式,这可能并不重要。
编辑
在 09/2022 年,这对我的 MacOS Monterey M1 Pro 芯片有帮助:
sudo lsof -t -i tcp:yourPortNumber | sudo xargs kill
2018 年,以下是我使用 MacOS HighSierra 的效果:
sudo lsof -nPi :yourPortNumber
然后:
sudo kill -9 yourPIDnumber
非常简单找到端口5900:
sudo lsof -i :5900
然后考虑59553作为PID
sudo kill 59553
最好有一个衬垫
kill -9 $(lsof -i:PORT -t) 2> /dev/null
示例: 在 Mac 上,想要清除端口 9604。以下命令非常有效
kill -9 $(lsof -i:9604 -t) 2> /dev/null
无论您如何打开端口,都以相同的方式关闭它。例如,如果您创建了一个套接字,将其绑定到端口 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 地址。
您还可以使用第一个命令来终止拥有特定端口的进程:
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)。
使用命令查找进程ID
lsof -n -i4TCP:8080
获取processId后
sudo kill -9 processID
然后提供您的系统密码。
我将
lsof
与 kill
结合使用,如上所述;但编写了一个快速的小 bash 脚本来自动化此过程。
使用此脚本,您只需从任何地方键入
killport 3000
,它将杀死端口 3000
上运行的所有进程。
我为此目的创建了一个函数。
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
将这段代码复制并粘贴到您的终端中应该可以释放您所需的端口。请记住更改最后一行中的端口号。
今天有一种比其他命令更简单的命令(没有 Sudo、包或多行) 要终止端口 8080,只需调用:
lsof -ti tcp:8080 | xargs kill
这似乎对我有用。只需将 your_port_number 更改为您要停止的端口号即可。
sudo lsof -t -i tcp:your_port_number | xargs kill -9
当打开端口的程序退出时,该端口将自动关闭。如果你杀死运行该服务器的 Java 进程,就可以了。
对于 Linux/macOS:
第1步:
sudo lsof -i :5955
第2步:
请注意打印输出中显示的 PID(进程 ID)值。
第三步:
kill <PID>
首先找出占用了所需端口的Procees id(pid)。(例如5434)
ps 辅助 | grep 5434
2.杀死该进程
kill -9 <pid>